Lio*_*rez 3 javascript async-await reactjs react-hooks
我有一个反应组件,它异步获取一些资源,然后订阅资源更改。
问题是清理函数不在该资源的关闭中:
useEffect(() => {
const onResourceChange = () => {
console.log('resource changed');
};
getSomeResource().then(resource => {
resource.subscribe(onResourceChange);
});
return () => {
resource.unsubscribe(onResourceChange); // Error! resource is undefined
}
}, []);
Run Code Online (Sandbox Code Playgroud)
useEffect由于不允许使用异步函数,因此在useEffect的 cleanup 函数中取消订阅此资源的最佳方法是什么?
我看到这里发生了两个“副作用”。
[])[resource])所以我
function useResource() {
const [resource, setResource] = useState(undefined)
const onResourceChange = () => console.log('resource changed');
// Get the resource, initially.
useEffect(() => {
getSomeResource(setResource)
}, [])
// When the resource is retrieved (or changed),
// the resource will subscribe and unsubscribe
useEffect(() => {
resource.subscribe(onResourceChange)
return () => resource.unsubscribe(onResourceChange)
}, [resource])
}
// Use it like this
function App() {
useResource()
return <>your elements</>
}
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个useEffect仅负责获取“资源”,而第二个useEffect负责取消/订阅回调。
并检查deps每个列表useEffect(前者为空[],后者取决于[resource])
| 归档时间: |
|
| 查看次数: |
1956 次 |
| 最近记录: |