我试图弄清楚当HMR启用时,react-router如何在AppContainer内部工作,并且卡在以下错误上。你能解释一下hack正在发生什么吗?
不变违规:根路由必须呈现单个元素
Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { AppContainer } from 'react-hot-loader';
// AppContainer is a necessary wrapper component for HMR
import Routes from './routes/index';
const MOUNT_APP = document.getElementById('root');
const render = () => {
ReactDOM.render(
<AppContainer>
<Routes />
</AppContainer>,
MOUNT_APP
);
};
render();
// Hot Module Replacement API
if (module.hot) {
module.hot.accept('./routes/index', () => {
render()
});
}
路线文件为:
import React from 'react';
import { Router, IndexRoute, browserHistory } from 'react-router';
import Home from './Home';
import SubView from './Sub';
const componentRoutes = {
component : Home,
path : '/',
indexRoute : SubView,
childRoutes : [
]
}
const Routes = () => {
return (
<Router history={browserHistory} routes={componentRoutes} />
);
};
export default Routes;
HomeView组件:
import React from 'react';
const HomeView = () => {
<div>
<h4>Welcome</h4>
</div>
}
export default HomeView;
HomeView路线:
import HomeView from './components/SubView';
export default {
component: HomeView
}
P.S:SubView等于HomeView。
答案 0 :(得分:2)
您的HomeView
组件不会返回任何内容。您需要将内部jsx包装在return ( ... )
。
答案 1 :(得分:2)
您需要从组件返回一个元素。现在,HomeView
的组件如下所示:
const HomeView = () => {
<div>
<h4>Welcome</h4>
</div>
}
你需要返回标记,而不是像这样把它放在函数体中:
const HomeView = () => {
return (
<div>
<h4>Welcome</h4>
</div>
)
}