react-router - 获取异步组件时 React 路由器抛出错误

标签 react-router redux

我正在使用 React、Redux 和 React Router 等来构建和示例应用程序。

我正在尝试异步加载应用程序的不同部分。我已将我的应用程序划分为鸭子,并且遵循此示例 https://github.com/insin/react-examples/tree/master/code-splitting-redux-reducers

但我收到此错误:

未捕获的不变违规:根路由必须渲染单个元素

当尝试使用React Router的getComponent方法获取异步组件时。 我在用着: react 路由器2.0.1

我的路线:

export default function configureRoutes(reducerRegistry) {
  return(
    <Route>
      <Route component={Landing}>
        <Route path='/login' component={Login}/>
        <Route path='/register' component={Register}/>
      </Route>
            <Route path="admin" getComponent={(location, cb) => {
                require.ensure([], require => {
                    cb(null, require('./containers/admin'))
                })
            }}/>
      <Route component={App}>
        <Route  path='/' component={Home} />
      </Route>
    </Route>
)}

我的组件

class Admin extends Component {
  componentDidMount() {
    this.props.load()  
  }
  render() {
    const { message, isFetching } = this.props
    return (
      <div>
        <p>{message}</p> 
        <p>This module was loaded via chunk </p>
        {loading && <p>Doing some fake loading ...</p>}
      </div>
    )  
  }  
}

Admin.propTypes = {
  message: PropTypes.string.isRequired,
  isFetching: PropTypes.bool.isRequired,
  load: PropTypes.string.isRequired
}

const mapStateToProps = state => state.admin

function mapDispatchToProps(dispatch) {
  return bindActionCreators({ load }, dispatch)
}

export default connect(mapStateToProps, mapDispatchToProps)(Admin)

有人有同样的错误吗?有任何想法吗?有人有类似的工作吗?

感谢社区!

更新:为了清晰起见添加了index.js

import configureRoutes from './routes'
import configureStore from './store/configureStore'
import coreReducers from './modules/core'
import ReducerRegistry from './reducer-registry'

var reducerRegistry = new ReducerRegistry(coreReducers)

// Configure hot module replacement for core reducers
if (process.env.NODE_ENV !== 'production') {
  if (module.hot) {
    module.hot.accept('./modules/core', () => {
      var nextCoreReducers = require('./modules/core')
      reducerRegistry.register(nextCoreReducers)
    })
  }
}

const routes = configureRoutes(reducerRegistry)
const store = configureStore(reducerRegistry)

render(
  <I18nextProvider i18n={i18n}>
    <Provider store={store}>
      <Router history={browserHistory} routes={routes} />
    </Provider>
  </I18nextProvider>,
  document.getElementById('root')
)

最佳答案

我认为你的根<Route>缺少 component field 。

您需要指定 componentgetComponent对于每个父路由,因为这将是当前子路由的组件传递给的组件 this.props.children .

而不是

export default function configureRoutes(reducerRegistry) {
  return (
    <Route>

你想要类似的东西

export default function configureRoutes(reducerRegistry) {
  return (
    <Route component={App}>

在这种情况下,您可能不需要另一个 App路线如下。

关于react-router - 获取异步组件时 React 路由器抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945890/

相关文章:

javascript - 在react-router中接受POST请求

javascript - React-router:允许未定义的路由传递给服务器

javascript - 子组件不会重新渲染,但父组件会重新渲染。如何让子组件重新渲染?

javascript - 响应逻辑应该发生在 saga 还是 reducer 中?

javascript - React Router Link onClick redux Action 调用不调用 reducer

reactjs - React-router-dom V6 无法正确更改路由(需要刷新 - f5 页面)

javascript - React - 如何返回到上一个分页页面?

reactjs - React-Redux 应用程序中的 OpenID Connect SSO

reactjs - 是否可以将 next-auth Provider 包装在 redux Provider 中?

javascript - 为什么React组件无限更新