React 模块无法热更新
React modules couldn't be hot updated
我正在使用 react-router 和 material-ui 构建一个 Web 应用程序ui。我最近注意到 React 热加载器已经更新,并且在使用带有 material-ui 的 ho loader 时遇到了一些问题。当我将它与 react router 一起使用时,热加载器不会为子组件工作。
这是我的 index.js
代码
import React from 'react';
import {render} from 'react-dom';
import { AppContainer } from 'react-hot-loader'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { Router, Route, Link, browserHistory,IndexRoute } from 'react-router'
import injectTapEventPlugin from 'react-tap-event-plugin';
import routes from './routes';
injectTapEventPlugin();
const App = () => (
<MuiThemeProvider>
<Router history={browserHistory} routes={routes} />
</MuiThemeProvider>
);
render(<App/>,document.getElementById('app'));
if (module.hot) {
module.hot.accept('./components/App', () => {
const NextApp = require('./components/App').default;
render(
<AppContainer>
<MuiThemeProvider>
<NextApp/>
</MuiThemeProvider>
</AppContainer>
,
document.getElementById('app')
);
});
}
这是我的应用程序组件
import React from 'react';
import Home from './Home';
import About from './About/AboutPage.react';
import NavigationBar from './navigation/navigationBar.react';
class App extends React.Component{
render(){
return(
<div>
<NavigationBar/>
{this.props.children}
</div>
);
}
}
export default App;
路由文件
import React from 'react';
import {render} from 'react-dom';
import { Router, Route, Link, browserHistory,IndexRoute } from 'react-router'
import App1 from './components/App';
import NavigationBar from './components/navigation/navigationBar.react';
import greetings from './components/Login/greetings';
export default (
<Route path="/" component={App1}>
<IndexRoute component={greetings}/>
</Route>
);
每当我对子组件进行任何更改时,浏览器控制台都会发出警告说
以下模块无法热更新:(需要完全重新加载)
这通常是因为已更改的模块(及其父模块)不知道如何热重载自己。有关详细信息,请参阅 http://webpack.github.io/docs/hot-module-replacement-with-webpack.html。
我收到此问题的任何特定原因以及如何解决此问题?
确保您还使用 react-hot-loader 的 AppContainer 组件包装了初始渲染。像这样:
const App = () => (
<AppContainer>
<MuiThemeProvider>
<Router history={browserHistory} routes={routes} />
</MuiThemeProvider>
</AppContainer>
);
此外,我没有看到您的 webpack 配置,因此请确保您还包括 react-hot-loader/patch
作为您的第一个条目,例如:
entry: [
'react-hot-loader/patch',
`webpack-dev-server/client?http://localhost:${config.port}`,
'webpack/hot/only-dev-server',
'./src/index.jsx'
],
如果您也有一个 .babelrc
文件,请确保将其作为您的插件之一,如下所示:
{
"presets": [
"react",
"es2015",
"stage-0"
],
"plugins": [
"react-hot-loader/babel",
"transform-decorators-legacy"
]
}
我正在使用 react-router 和 material-ui 构建一个 Web 应用程序ui。我最近注意到 React 热加载器已经更新,并且在使用带有 material-ui 的 ho loader 时遇到了一些问题。当我将它与 react router 一起使用时,热加载器不会为子组件工作。 这是我的 index.js
代码import React from 'react';
import {render} from 'react-dom';
import { AppContainer } from 'react-hot-loader'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { Router, Route, Link, browserHistory,IndexRoute } from 'react-router'
import injectTapEventPlugin from 'react-tap-event-plugin';
import routes from './routes';
injectTapEventPlugin();
const App = () => (
<MuiThemeProvider>
<Router history={browserHistory} routes={routes} />
</MuiThemeProvider>
);
render(<App/>,document.getElementById('app'));
if (module.hot) {
module.hot.accept('./components/App', () => {
const NextApp = require('./components/App').default;
render(
<AppContainer>
<MuiThemeProvider>
<NextApp/>
</MuiThemeProvider>
</AppContainer>
,
document.getElementById('app')
);
});
}
这是我的应用程序组件
import React from 'react';
import Home from './Home';
import About from './About/AboutPage.react';
import NavigationBar from './navigation/navigationBar.react';
class App extends React.Component{
render(){
return(
<div>
<NavigationBar/>
{this.props.children}
</div>
);
}
}
export default App;
路由文件
import React from 'react';
import {render} from 'react-dom';
import { Router, Route, Link, browserHistory,IndexRoute } from 'react-router'
import App1 from './components/App';
import NavigationBar from './components/navigation/navigationBar.react';
import greetings from './components/Login/greetings';
export default (
<Route path="/" component={App1}>
<IndexRoute component={greetings}/>
</Route>
);
每当我对子组件进行任何更改时,浏览器控制台都会发出警告说
以下模块无法热更新:(需要完全重新加载)
这通常是因为已更改的模块(及其父模块)不知道如何热重载自己。有关详细信息,请参阅 http://webpack.github.io/docs/hot-module-replacement-with-webpack.html。
我收到此问题的任何特定原因以及如何解决此问题?
确保您还使用 react-hot-loader 的 AppContainer 组件包装了初始渲染。像这样:
const App = () => (
<AppContainer>
<MuiThemeProvider>
<Router history={browserHistory} routes={routes} />
</MuiThemeProvider>
</AppContainer>
);
此外,我没有看到您的 webpack 配置,因此请确保您还包括 react-hot-loader/patch
作为您的第一个条目,例如:
entry: [
'react-hot-loader/patch',
`webpack-dev-server/client?http://localhost:${config.port}`,
'webpack/hot/only-dev-server',
'./src/index.jsx'
],
如果您也有一个 .babelrc
文件,请确保将其作为您的插件之一,如下所示:
{
"presets": [
"react",
"es2015",
"stage-0"
],
"plugins": [
"react-hot-loader/babel",
"transform-decorators-legacy"
]
}