You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中useEffect取数是否通用推荐?状态触发取数是否规范?

React 数据获取的 useEffect 最佳实践

示例代码

// Sample Code

const [anyState, setAnyState] = useState<number>(0);

const fetchData = async () => {
  try {
    const rsp = await fetch(...);
    setData(rsp)
  }
}

useEffect(() => {
  fetchData();
},[anyState]);


return (
  <>
    <button onClick={() => setAnyState(prev => prev + 1)}>Update</button> {/* 是否推荐该方式? */}
    <button onClick={() => fetchData()}>Update</button> {/* 我认为这是常规方式。 */}
  </>
)

问题解答

1. 在React中使用useEffect钩子获取数据是否属于通用做法,是否推荐?

用useEffect做数据获取是React里非常普遍且推荐的做法,尤其是在常规的客户端组件中。它专门用来处理组件挂载后、或者依赖项变化时的副作用,数据获取刚好契合这个场景。不过React 18推出后,结合Suspense的新数据获取模式(比如服务端组件、客户端组件里的Suspense用法)在一些场景下更优,但对于大多数普通的客户端数据请求,useEffect依然是靠谱且被广泛使用的方案。

2. 通过更新状态触发useEffect调用fetchData获取数据的方式是否规范、是否值得推荐?

这种方式不规范,也不建议用。主要问题有几个:

  • 语义混乱:anyState和数据请求本身没有直接关系,只是个用来触发请求的"开关",后续维护代码的人很难理解这个状态的作用。
  • 多余状态增加复杂度:平白多维护一个无关状态,不仅让组件逻辑变乱,还可能导致不必要的重渲染。
  • 误触发风险:如果这个状态被其他逻辑不小心修改,会导致无意义的重复请求,浪费资源。

更合理的方式就是你提到的第二种——直接在按钮点击事件里调用fetchData,逻辑清晰直接,只有用户主动触发时才发起请求。如果需要组件挂载时也请求一次数据,可以单独写一个依赖为空数组的useEffect:

useEffect(() => {
  fetchData();
}, []); // 仅组件挂载时执行一次

内容的提问来源于stack exchange,提问作者Humanoid Mk.12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:29:54