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

为何React useEffect中fetch的then直接传入setUser而非调用它?

为什么在then中直接传入setUser而非调用它?

首先先纠正你代码里的一个小错误:第一行的useEffect应该是useState,正确的初始化写法是:

const [user, setUser] = useState({});

接下来解释核心问题:

  • then方法需要接收一个函数作为参数
    fetch返回的Promise对象的then方法,会在请求成功完成后,自动调用你传入的回调函数,并把Promise resolve的结果(也就是resp.json()返回的用户数据)作为参数传给这个回调。

  • 直接传setUser是传递函数引用
    setUser本身就是一个接收新状态值的函数,它的参数正好就是我们从接口拿到的用户数据。直接把setUser传给then,相当于告诉Promise:等你拿到数据后,就用这个数据去调用setUser。这完全等价于写:

    .then(value => setUser(value))
    

    是一种简洁的写法。

  • 如果写成setUser(value)会立即执行
    要是你写.then(setUser(value)),JavaScript会先执行setUser(value)这个表达式——但此时value根本不存在(还没从接口拿到数据),而且setUser会被立刻调用,而不是等请求完成后调用。更关键的是,setUser的返回值是undefined,这就导致then接收的是undefined而非一个函数,会引发错误或者完全不执行状态更新逻辑。

简单来说,then需要的是一个“待执行的函数”,而不是“函数执行后的结果”,直接传setUser就是给它一个符合要求的函数引用,而调用setUser(value)则是提前执行了函数,传递了无效的结果。

内容的提问来源于stack exchange,提问作者falah mahmood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:01:13