更新的反应上下文值未反映在上一个屏幕中

Posted

技术标签:

【中文标题】更新的反应上下文值未反映在上一个屏幕中【英文标题】:React Context value updated is not reflecting in previous screen 【发布时间】:2021-04-14 15:02:01 【问题描述】:

我已经通过 A -> B 的导航对原生应用做出反应。

//TestContext.js
export const TestContext = createContext('initial value');

//B.js
  const myVal,changeMyVal = useContext(TestContext);
return(
<View>
    <Button
            onPress=() => 
              changeMyVal('new value')
              console.log(myVal); // Prints 'new value'
            >
</View>
);

//A.js
  const myVal = useContext(TestContext);
return(
<View>
    <Button
            onPress=() => 
              console.log(myVal); // Prints 'initial value'
            >
</View>
);

当我从 B 回到 A 并打印上下文值时,我仍然得到 初始值。既然我从 B 回来时没有重新渲染,那么如何在 A 中获取更新的值?

【问题讨论】:

您好,欢迎来到 ***!请显示您使用&lt;TestContext.Provider&gt; 的组件。您点击edit 为您的问题添加详细信息。 【参考方案1】:

useContext 不会像 useState 挂钩那样返回更新程序函数。如果您想从消费者那里更新您的状态,只需从提供者那里提供一个更新器功能,例如,

const ContextShared = createContext( value: "", updater: () => null );
    ...
    const [value, updater] = useState("initialValue");
    ...
    <ContextShared.Provider value= value, updater >
        <Component1 />
        <Component2 />
      </ContextShared.Provider>


    function Component1() 
    const  value  = useContext(ContextShared);
    ...
    
    
    function Component2() 
        const  updater  = useContext(ContextShared);
        function handleClick() 
        updater("updated from page 2");
      
    
      return <div onClick=handleClick>Page 2 </div>;
    

Live working example

【讨论】:

由于我没有足够的React Native背景,我不能再帮你了:(.

以上是关于更新的反应上下文值未反映在上一个屏幕中的主要内容,如果未能解决你的问题,请参考以下文章

不理解 Java EE 中上下文的概念

构造函数中上下文类的依赖注入

反应上下文状态未更新

反应上下文不保存更新

反应上下文挂钩更新后如何触发功能

jsp中上下文对象是什么?