更新的 React Context 值未反映在上一个屏幕中
React Context value updated is not reflecting in previous screen
我已经通过从 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 中获取更新的值?
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>;
}
我已经通过从 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 中获取更新的值?
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>;
}