【问题标题】:Passing object through react context provider, it says: objects are not valid as a react child通过反应上下文提供者传递对象,它说:对象作为反应子无效
【发布时间】:2020-10-26 16:39:02
【问题描述】:

我试图通过上下文提供者值传递一个对象,以便能够使用 setter 函数来改变中心状态。 这是代码:

export const StoreContext = createContext()

const Store = (props) => {
   state =  {
      user : {},
      page : "messages"
   }
   const setUser = (user) => {
      this.state.user = user;
      this.saveState();
   }

   return (
      <StoreContext.Provider value={{state}}>
         {props.children}
      </StoreContext.Provider>
   )
}

这是我的 app.js:

import React from 'react';
import {
  SafeAreaView,
  StyleSheet,
  StatusBar
} from 'react-native';

import 'react-native-gesture-handler';

import StackNavigator from './pages/StackNavigator';
import Store from './core/Store';

const App: () => React$Node = () => {
  return (
    <>
       <Store>
          <StackNavigator />
       </Store>  
    </>
  );
};

export default App;

StackNavigator.js

import React from 'react'
import 'react-native-gesture-handler';
import {
    SafeAreaView,
    StyleSheet,
    StatusBar,
  } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import Login from './Login'
import Register from './Register'
import UserArea from './UserArea';
import Landing from './Landing';
export default function StackNavigator() {
    const Stack = createStackNavigator();

    return (
        <>
                 <NavigationContainer>
        <StatusBar barStyle="dark-content" />
          <Stack.Navigator initialRouteName="UserArea"   screenOptions={{
    headerShown: false
  }}>
            <Stack.Screen
              name="Login"
              component={Login}
            />
            <Stack.Screen name="Register" component={Register} />
            <Stack.Screen name="UserArea" component={UserArea} />
            <Stack.Screen name="Landing" component={Landing} />


          </Stack.Navigator>
      </NavigationContainer> 
        </>
    )
}

这是错误:

错误:对象作为 React 子对象无效(找到:带有键 {state} 的对象)。如果您打算渲染一组子项,请改用数组。

【问题讨论】:

  • 那么props.children是什么值?
  • 这个组件是一个包装器,所以我可以说几乎所有东西都是这个的子组件。这个确切的孩子是我的主要 StackNavigator 组件
  • 能否分享完整代码
  • 我添加了 app.js
  • 你能控制 .log props.chidlren 吗?我猜 StackNavigator 没有正确初始化。你也可以分享那个代码吗?

标签: reactjs react-native react-context


【解决方案1】:

原来我是直接在一些孩子中渲染对象! 我在使用字符串值测试上下文功能时这样做了,但是当我使用对象时忘记删除它。

感谢您的努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2019-05-17
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多