如何使用静态变量更新React Context?

问题描述 投票:1回答:1

所以,我有ClientContext的默认值:

export const defaultContext = {
    test: "Hello"
};

export const UserApplicationContext = React.createContext(defaultContext);

然后在我的子组件中,我正在更新此值:

    contextDefaultData = this.context,
    contextData = {
        ...contextDefaultData,
        test: "New"
        }
    };

<UserApplicationContext.Provider value={contextData}>
    <App/>
</UserApplicationContext.Provider>

现在,问题:在App中,我可以通过UserApplicationContext.Consumer组件访问更新的值,但我无法通过静态访问更新的值,如下所示:

import UserApplicationContext from './UserApplicationContext'
static contextType = UserApplicationContext

因此,this.context将指向默认值,但不会更新一个。如何在不导出新上下文的情况下访问更新的值?谢谢!

javascript reactjs
1个回答
2
投票

我猜这是上下文api的限制?

为了访问最新版本的上下文,您必须位于提供程序组件树内部呈现的组件内部,并且您必须使用<UserApplicationContext.Consumer>之类的上下文,或者如果您想使用钩子/功能组件,那么可以像const mostRecentContext = useContext(UserApplicationContext)更好的方式做到这一点。

如果您尝试导入这样的上下文并访问它而不通过.ConsumeruseContext钩子使用它,它将始终是传递给React.createContext()的值。

© www.soinside.com 2019 - 2024. All rights reserved.