【发布时间】: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