reactjs - 为什么 useEffect 不直接支持异步回调或者清理函数有单独的参数?
问题描述
我知道我不能直接将这样的异步回调传递给 useEffect
useEffect(async () => { // not supported, as this implicitly returns a Promise
const result = await axios(
'https://someurl',
);
setData(result.data);
});
因为 React 不期望任何或(清理)函数回调作为useEffect
.
但我不明白的是:这种设计选择有什么具体原因吗?为什么没有像useEffect(callback, cleanup, dependencies)
这样的签名,然后允许我直接将异步回调作为第一个参数传递,因为清理函数可以很容易地作为第二个参数传递?
解决方案
但我不明白的是:这种设计选择有什么具体原因吗?
想到的原因之一是以下。当您从中返回函数时,经常会做出反应,useEffect
例如取消订阅事物等,并且通常您可能需要从useEffect
. 例如:
useEffect(() => {
let cancelled = false;
fakeFetch(person).then(data => {
if (!cancelled) {
setData(data);
}
});
return () => {
cancelled = true;
}
}, [person])
使用您的设计,您将无法做到以上。
推荐阅读
- javascript - 我需要在js中制作更好的单词计算功能
- c++ - 通过值传递对象时防止切片(继承)
- conda - 打开终端时导入 conda 错误回溯
- javascript - chrome扩展注入的动态内容中的css问题
- c# - SQL Server中具有不同前缀的多个增量系列?
- vue.js - 具有计算属性问题的 el-form 模型绑定
- r - 我们可以在不重新加载页面的情况下重置 r 中的页面或对象吗
- linux-kernel - 如何在 Linux 内核中更改 PAGESIZE
- contenteditable - Buefy / Bulma:contenteditable div 使 Safari 崩溃
- c# - .net API - 异步请求问题