我正在try 执行一些条件呈现,所以我创建了一个名为signedIn的布尔值,并try 更改子组件的值.我花了很多时间,大部分价值都是只读的.然后,我找到了一些其他示例,这些示例通过useContext传递了setter函数,并且它在所示的示例上工作,该示例是一个Reaction项目.我的项目是原生react ,我似乎无法触发该函数.我可以读取值,但不能更改它. 我的ConextProvider代码如下:
import React, { useState, useContext } from "react";
const AuthContext = React.createContext();
const AuthUpdateContext = React.createContext();
export function useAuthContext() {
return useContext(AuthContext);
}
export function useAuthUpdateContext() {
return useContext(AuthUpdateContext);
}
export function AuthContextProvider({ children }) {
const [signedIn, setSignedIn] = useState(true);
function toggleSignedIn() {
setSignedIn((prevSignedIn) => !prevSignedIn);
console.log("fired from AuthContextProvider : toggleSignedIn");
console.log(signedIn);
}
return (
<AuthContext.Provider value={signedIn}>
<AuthUpdateContext.Provider value={toggleSignedIn}>
{children}
</AuthUpdateContext.Provider>
</AuthContext.Provider>
);
}
事实上,如果能够通过js setSignedIn(newVal)
来设置SignedInprops 的值会更好,但我也会满足于得到这项工作.
我的Provider 按照许多地方的建议,将应用程序包裹在一起,但功能似乎没有启动.
这就是我在登录屏幕中使用功能的地方
export default function SignInScreen({ navigation }) {
const [username, setUserName] = useState("");
const [password, setPassWord] = useState("");
const signedIn = useAuthContext();
const toggleSignedIn = useAuthUpdateContext();
const SignIn = async () => {
try {
await login(username, password);
toggleSignedIn;
console.log("toggleSignedIn fired from SignInScreen");
console.log(toggleSignedIn);