当前位置: 首页 > 知识库问答 >
问题:

最佳实践React钩子HTTP加载

巫晋鹏
2023-03-14

我最近用react启动了另一个项目,因为我有一点时间来摆弄,我使用了带有挂钩的功能组件。我没有任何问题,只有一件事我不确定我是否正确使用,下面是一个例子:

function MyComponent() {
  const [data, setData] = useState([]);
  const [dataLoaded, setDataLoaded] = useState(false);

  var getDataFromHTTP = async () { ... }

  var loadData = async () => {
    if (!dataLoaded) {
      setDataLoaded(true);
      setData(await getDataFromHTTP());
    }
  }

  loadData();

  return( ... );
}

如果我喜欢每件事的处理方式,我想使用loadData()是肮脏的;就像在前面的例子中,我尝试使用effect来处理如下内容:

useEffect(() => {
  loadData();
}, []);

但后来我得到了一个警告,比如“loadData应该是useEffect的依赖项”。如果我省略了useEffect的第二个参数,它看起来就像是将它直接放在MyComponent中一样。所以基本上,我的问题是,在这个例子中,当安装组件时加载数据的最佳实践是什么?当然,当道具/状态发生变化时,如果需要,重新加载道具/状态的最佳实践是什么?

编辑:我对useEffect的警告是:

[Warning] ./src/list/main.js (1.chunk.js, line 25568)
Line 53:  React Hook useEffect has a missing dependency: 'loadData'. Either include it or remove the dependency array  react-hooks/exhaustive-deps

共有1个答案

吴凯
2023-03-14

useEffect的工作方式是依赖项数组中的某个更改响应将运行该效果

useEffect(() => {
  loadData();
}, [loadData]); // <-- dependencies array

但是,正如您所声明的那样,loadData是一个普通函数,它将在每次渲染时重新分配给一个新函数,并触发效果。最好的方法是将loadData函数包装在useCallback钩子中

const loadData = useCallback(async () => {
    if (!dataLoaded) {
      setDataLoaded(true);
      setData(await getDataFromHTTP());
    }
}, [])
 类似资料:
  • 我计划使用我的状态作为一种信号形式,我将来回改变以显示我的加载屏幕、主窗体和成功或错误消息。但不确定这是否是最佳实践。下面是一个示例代码 但我不确定这是否是最好的方法,我担心这会减慢我的应用程序或消耗客户机的CPU。你能推荐更好的方法吗?

  • 我正在使用redis pub/sub 编写两个或多个节点进程之间的p2p通信,使用的是lib。 我将发布不同类型的消息,如: 您好:通知其他订阅者新进程已连接 我不知道是否它是更好的为redis订阅许多通道(一个消息类型)或创建一个单一的通道,并发送一个属性,定义消息的类型,如: 提前谢谢

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。