【发布时间】:2021-05-17 15:42:50
【问题描述】:
我是 React Native 的新手,不太了解对象的初始状态以及当我要设置多个属性时更新状态的概念。
错误(编辑#2):
Objects are not valid as a React child (found: object with keys {userRole}). If you meant to render a collection of children, use an array instead.
App.js
const initialLoginState = {
userRole: null,
userId: null,
};
const [user, setUser] = useState(initialLoginState);
const [isReady, setIsReady] = useState(false);
const restoreUser = async () => {
const user = await authStorage.getUser();
if (user) setUser(user);
};
if (!isReady) {
return (
<AppLoading
startAsync={restoreUser}
onFinish={() => setIsReady(true)}
onError={console.warn}
/>
);
}
//render
return (
<AuthContext.Provider value={{ user, setUser }}>
<NavigationContainer>
{user.userRole ? <ViewTest /> : <AuthNavigator />}
</NavigationContainer>
</AuthContext.Provider>
);
useAuth 在我收到数据时更新用户:
const logIn = (data, authToken) => {
setUser((prevState) => ({
userRole: {
...prevState.userId,
userRole: data.USERROLE,
},
}));
authStorage.storeToken(data.USERID);
};
【问题讨论】:
-
你能澄清
initialise first state的意思吗? -
我希望我的状态对象具有上面
initialLoginState中所示的属性,以便我可以使用它来有条件地渲染组件。 -
将计数器设置为
const [counter, setCounter] = useState(0)然后setCounter(counter + 1)递增时类似的东西,但我需要一个具有属性的对象 -
是的,我现在把问题修改得更清楚。
-
您可能想分享更多代码,尤其是
user的来源
标签: javascript reactjs react-native expo use-state