反应本地,全局useState?

时间:2020-09-14 21:38:33

标签: reactjs react-native components expo state

我有一个Fire类,如果用户未连接,uid将返回undefined,如果用户已连接,则返回字符串(他的uid)。

有时候我的渲染依赖于此。

例如:

const [auth, setAuth] = useState<undefined|string>(Fire.shared.uid);

[...]

<Text>{(auth == undefined) ? "not authentificated" : "great")}</Text>

我们可以想象用户没有连接,因此文本为not authentificated。 现在,他将登录或在其他页面注册,因此Fire类中的uid变量将更改。 那么我该如何更改状态值?

没有useState全局之类的东西吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您应该使用上下文:

page-context.js

export const PageContext= React.createContext();

app.js

const App = () => {
const [auth, setAuth] = useState<undefined|string>(undefined);

return(
    <PageContext.Provider value={[auth, setAuth]}>
       <NavigationContainer> // your routes
    </PageContext.Provider>)

OtherScreen.js

function OtherScreen() {
    const [auth] = useContext(PageContext);
    return (<Text>{(auth == undefined) ? "not authentificated" : "great")}</Text>)
}

Sign.js

 function Sign() {
    const [auth, setAuth] = useContext(PageContext);
    return (<Button onPress={()=>setAuth("myUid)} />)
 }

答案 1 :(得分:1)

您可以使用react js上下文api来具有以下功能:https://reactjs.org/docs/context.html#updating-context-from-a-nested-component

或者您可以使用第三方库(例如redux或mobx)来具有全局状态

redux:https://redux.js.org/ mobx:https://mobx.js.org/README.html