首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带有React钩子的?

如何使用带有React钩子的?
EN

Stack Overflow用户
提问于 2020-04-17 05:36:50
回答 2查看 1.4K关注 0票数 0

我设置了一个类似于这样的反应上下文:

代码语言:javascript
复制
export const TokenContext = createContext({token: ''});

我正在使用它在我的App.js中创建一个提供程序,在这里我首先尝试从AsyncStorage中检索令牌:

代码语言:javascript
复制
const App = () => {

    const [token, setToken] = React.useState('');

    const retrieveData = async () => {
        const storedToken = await AsyncStorage.getItem('token');
        console.log(storedToken);
        setToken(storedToken);

        return;
    };

    React.useEffect(() => {
        retrieveData();
    }, []);

    return (
        <NavigationContainer>
            <TokenContext.Provider token={token}>
                <RootNav  />
            </TokenContext.Provider>
        </NavigationContainer>
    );
};

我想在上面使用的RootNav组件中使用这个上下文:

代码语言:javascript
复制
const RootNav = () => {
    const token = React.useContext(TokenContext);
    const isSignedIn = !!token;

    return (
        <Root.Navigator>
            {isSignedIn ? (
                <>
                    <Root.Screen name={RouteNames.TAB_NAV} component={TabNav} />
                </>
            ) : (
                <>
                    <Root.Screen
                        name={RouteNames.LOGIN_SCREEN}
                        component={LoginScreen}
                    />
                </>
            )}
        </Root.Navigator>
    );
};

但是,即使存储中有一个值,上下文中的令牌值也是未定义的。如果我手动将支柱传递给RootNav (没有上下文),我可以很好地使用它,如下所示:

App.js

代码语言:javascript
复制
...
  return (
        <NavigationContainer>
             <RootNav token={token} />
        </NavigationContainer>
    );

RootNav.js

代码语言:javascript
复制
const RootNav = ({token}) => {
    const isSignedIn = !!token;

    return (
    ...

但是,我想在嵌套更多的地方使用这个令牌,所以如果我能让它正常工作,我宁愿使用上下文。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-17 06:06:27

传递带值的令牌

代码语言:javascript
复制
    <NavigationContainer>
        <TokenContext.Provider value={{token}}>
            <RootNav  />
        </TokenContext.Provider>
    </NavigationContainer>

在消费者中

代码语言:javascript
复制
const {token} = React.useContext(TokenContext);
票数 1
EN

Stack Overflow用户

发布于 2020-04-17 06:56:32

尝试使用对象而不是字符串。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61264804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档