reactjs - 如何在本机反应中更新子组件的使用上下文变量
问题描述
我正在使用 useMemo 和 useContext 挂钩在我的 react native 应用程序中存储登录和注销状态。
import { AuthContext } from "./src/app/context";
export default () => {
const [isLoading, setIsLoading] = React.useState(true);
const [userToken, setUserToken] = React.useState(null);
const [userType, setUserType] = React.useState(null);
const [fontsLoaded, setFontsLoaded] = React.useState(false);
const authContext = React.useMemo(() => {
return {
signIn: (userType) => {
setUserToken("dummy");
setUserType(userType);
},
signUp: () => {
setIsLoading(false);
},
signOut: () => {
setIsLoading(false);
setUserToken(null);
},
showBottomNavigation: false
};
}, []);
React.useEffect(() => {
setTimeout(() => {
setIsLoading(false);
}, 1000);
}, []);
return (
<AuthContext.Provider value={authContext}>
<NavigationContainer>
<RootStackScreen userToken={userToken} userType={userType}/>
</NavigationContainer>
</AuthContext.Provider>
);
};
上下文 js 文件如下所示:
import React from "react";
export const AuthContext = React.createContext();
我想从子组件更新showBottomNavigation(在 useMemo 对象中)。
我是这些概念的新手,任何建议如何更新showBottomNavigation并使用它。
解决方案
您可以使用状态来更改值。您的子组件可以更改状态,进而可以更改上下文的值。
import { AuthContext } from "./src/app/context";
export default () => {
const [isLoading, setIsLoading] = React.useState(true);
const [userToken, setUserToken] = React.useState(null);
const [userType, setUserType] = React.useState(null);
const [fontsLoaded, setFontsLoaded] = React.useState(false);
const [bottomNavigation, setBottomNavigation] = useState(false);
const authContext = React.useMemo(() => {
return {
signIn: (userType) => {
setUserToken("dummy");
setUserType(userType);
},
signUp: () => {
setIsLoading(false);
},
signOut: () => {
setIsLoading(false);
setUserToken(null);
},
showBottomNavigation: false
};
}, []);
React.useEffect(() => {
setTimeout(() => {
setIsLoading(false);
}, 1000);
}, []);
return (
<AuthContext.Provider value={...authContext,showBottomNavigation:bottomNavigation }>
<NavigationContainer>
<RootStackScreen userToken={userToken} userType={userType}/>
<Text onPress={()=>setBottomNavigation(true)}>Change Bottom Nav</Text>
</NavigationContainer>
</AuthContext.Provider>
);
};
推荐阅读
- mongodb - 如何根据给定的条件提升 Mongodb 搜索结果
- python - 如何在 elasticsearch-dsl 中加入两个 Document 对象?
- python - Django CustomUser 在管理员中创建,通过电子邮件通知用户
- r - 如何用其他列更改 Na?
- c# - ASP.NET Core:依赖注入——类似于 autofac 模块
- asp.net-core - CookiePolicyOptions 如何从数据库中设置
- javascript - 日期选择器 React 中的时间值无效
- python - 如何使用 python/ifcopenshell、f.ex IfcBuildingElementProxy 将对象 IfcClassification 更改为 IfcWindow?
- python-3.x - 如何使用 Telethon 从我的电报联系人中删除用户?
- flutter - 颤振中的变体和AssetImage不起作用