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

Posted

技术标签:

【中文标题】React.children.only 期望接收单个反应元素子导航器【英文标题】:React.children.only expected to receive a single react element child Navigator 【发布时间】:2017-09-04 04:23:03 【问题描述】:

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

这是给出错误的代码。

render() 
  return (

  <Provider store=store>

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

    <Tabs />



  </Provider>


 );

“React.children.only 预计会收到一个反应元素子”我在运行它时收到此错误。请帮忙。 我知道有很多其他类似的主题发布了,但没有一个可以为我的问题提供适当的解决方案。

【问题讨论】:

【参考方案1】:

react-redux &lt;Provider /&gt; 组件期望其子 prop 是单个 ReactElement,即应用程序的根组件。这可能就是这个错误的来源。

道具

store(Redux 存储):应用程序中的单个 Redux 存储。 children (ReactElement) 组件层次结构的根。

示例

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

【讨论】:

你能给我举个例子吗?我不明白 尝试创建一个新组件来包装您的 Navigator 和 Tabs 组件。然后将其嵌套在 Provider 中。 对不起,我是新手,你能举个例子吗?【参考方案2】:

可能会迟到,但您可以将React.Fragment 包裹在您的导航器和选项卡周围以绕过该错误。 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>


 );

【讨论】:

不错!也可以转移到 React Native。【参考方案3】:

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

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 组件中呈现它,如其他答案中所述。 希望这会有所帮助!

【讨论】:

相邻的 JSX 元素必须包含在封闭标签中 是的,将 Root 作为 Provider 中组件的功能传递,它对我有用。谢谢【参考方案4】:

redux 的 Provider 组件期望只有一个孩子。你传递给它两个孩子,Navigator 和 Tabs。将 Provider 中的所有内容包装在一个组件中。

【讨论】:

例子?好吧,我试过这样 , 但只有 出现在应用程序中。

以上是关于React.children.only 期望接收单个反应元素子导航器的主要内容,如果未能解决你的问题,请参考以下文章

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

如何修复 React.Children.only 期望在 react.js 中接收单个 React 元素子项?

React.Children.only 期望接收带有 <Link > 组件的单个 React 元素子元素

Next.js:错误:React.Children.only 预期接收单个 React 元素子项

React.Children.only 预计会收到单个 React 元素子错误

我收到“错误:React.Children.only 预计会收到一个 React 元素子项。”带有 TouchableWithoutFeedback