React的setState函数支持传入哪些类型的参数?
问题解答
你代码里传入setDarkTheme的参数是React状态更新的函数式更新回调,不是提前执行的结果,具体说明如下:
- useState返回的状态更新函数支持两种入参形式:
- 直接传新状态值:就是你之前了解的用法,比如
setDarkTheme(false),适合新状态不需要依赖旧状态的场景。 - 传回调函数:也就是你代码里的写法,你只需要把函数本身传给更新函数,React内部处理更新逻辑时,会自动调用这个回调,同时把当前最新的旧状态值作为参数传入回调,回调的返回值就是最终要更新的新状态。
- 直接传新状态值:就是你之前了解的用法,比如
- 你这段代码的执行逻辑是:
当调用toggleTheme触发更新时,React会先拿到darkTheme的最新值,传给你写的箭头函数作为prevDarkTheme参数,执行箭头函数得到取反后的布尔值,再把darkTheme更新为这个新值。 - 这种写法的优势:
当新状态需要基于旧状态计算时,函数式更新能保证拿到的旧状态一定是最新的,避免因为闭包陷阱拿到过期的状态值,导致更新不符合预期。比如你在同一个同步逻辑里多次调用状态更新函数,用函数式更新的写法每次都能拿到上一次更新后的状态值,直接传固定值的话只会生效最后一次。
内容的提问来源于stack exchange,提问作者draca
相关产品推荐
相关产品推荐

