【发布时间】:2021-01-23 08:17:27
【问题描述】:
我有一个简单的上下文来设置它从后端获得的一些值,伪代码:
export const FooContext = createContext();
export function Foo(props) {
const [value, setValue] = useState(null);
useEffect(() => {
axios.get('/api/get-value').then((res) => {
const data = res.data;
setValue(data);
});
}, []);
return (
<FooContext.Provider value={[value]}>
{props.children}
</FooContext.Provider>
);
}
function App() {
return (
<div className="App">
<Foo>
<SomeView />
</Foo>
</div>
);
}
function SomeView() {
const [value] = useContext(FooContext);
console.log('1. value =', value);
const myFunction = () => {
console.log('2. value = ', value);
}
return (<div>SomeView</div>)
有时我会得到:
1. value = 'x'
2. value = null
所以基本上出于某种原因,尽管已更新为 'x',但值在嵌套函数内仍为 null。
【问题讨论】:
-
你在哪里打电话给
myFunction? -
这里的代码中好像没有调用myFunction
-
对我来说看起来像是一个陈旧的闭包,尽管我无法判断,因为您的伪代码函数在任何地方都没有被调用
-
每次单击按钮时都会调用 myFunction(不在代码中)。按钮是组件的一部分。
-
添加了我的更新答案,其中您如何在父函数之外调用嵌套函数?@Bob Sacamano
标签: reactjs nested-function use-context