React.children.only 预期接收单个反应元素子导航器

React.children.only expected to receive a single react element child Navigator

我尝试了太多主题帮助,但这并不能帮助我修复这个错误,也许是因为我是 react-native 的新手。

这是出错的代码。

render() {
  return (

  <Provider store={store}>

    <Navigator
      initialRoute={{ name: 'Wake' }}
      configureScene={(route, routeStack) => Navigator.SceneConfigs.FloatFromBottom}
      renderScene={RouteMapper}
    />

    <Tabs />



  </Provider>


 );
}

"React.children.only expected to receive a single react element child" 我在 运行 时收到此错误。请帮忙。 我知道还有很多其他类似的主题,但 none 为我的问题提供了适当的解决方案。

redux 的 Provider 组件预计只有一个子组件。您将传递给它两个子项,Navigator 和 Tabs。将 Provider 中的所有内容包装在一个组件中。

react-redux <Provider /> 组件期望它的子属性是一个单独的 ReactElement,即您应用程序的根组件。这可能是此错误的来源。

Props

  • store (Redux Store): The single Redux store in your application.
  • children (ReactElement) The root of your component hierarchy.

Example

ReactDOM.render(
  <Provider store={store}>
    <div>
        <MyRootComponent/>
        <OtherComponent1/>
        <OtherComponent2/>
        // {...} as longer you let the component inside one global component 
        // - here the divs - React considers you have only one child. That it. 
    </div>
  </Provider>,
  rootEl
);

来源:https://github.com/reactjs/react-redux/blob/master/docs/api.md#provider-store

上面的答案没有给你代码示例,我会添加一些适用于你的情况的代码:

const Root = () => {
  return (
   <div>
    <Navigator
      initialRoute={{ name: 'Wake' }}
      configureScene={(route, routeStack) => Navigator.SceneConfigs.FloatFromBottom}
      renderScene={RouteMapper}
    />

    <Tabs />
   </div>
 )   
}


render() {
  return (
    <Provider store={store}>
      <Root />
    </Provider>
  );
}

您基本上需要将 Nav 和 Tabs 组件包装在 Root 组件中,以便在 Provider 组件中呈现它,如其他答案中所述。 希望这对您有所帮助!

可能会迟到 post,但您可以将 React.Fragment 环绕在导航器和 Tab 周围以绕过该错误。 https://reactjs.org/docs/fragments.html

render() {
  return (

  <Provider store={store}>
    <React.Fragment>
       <Navigator
         initialRoute={{ name: 'Wake' }}
         configureScene={(route, routeStack) => Navigator.SceneConfigs.FloatFromBottom}
         renderScene={RouteMapper}
       />

       <Tabs />
    </React.Fragment>


  </Provider>


 );
}