React useTransition Hook疑问:内部setState机制及配置参数是否移除
React useTransition Hook 常见问题解答
一、useTransition箭头函数内的setState如何运作?
- 调用
startTransition包裹的回调时,React会把回调里所有状态更新标记为过渡更新,这类更新优先级低于普通状态更新(比如输入框输入、按钮点击响应)。 - 你的示例里,
setResource的状态更新会被打上过渡标记,React不会立刻同步执行它,而是先处理高优先级任务,等浏览器空闲后再处理这个过渡更新。 - 回调里的
console.log是同步执行的,所以会先打印"started",再打印"end",状态更新的生效则是异步且低优先级的。
示例代码:
startTransition(() => { console.log("started"); setResource(fetchProfileData(nextUserId, 2000)); console.log("end"); });
二、useTransition的timeoutMs等配置参数是否已被移除?
- 没错,这些配置参数在React稳定版本里已经被移除了。
- 早期实验版本的useTransition支持传入包含
timeoutMs、busyDelayMs等字段的配置对象,但正式发布时React调整了API,现在useTransition不接受任何参数,只返回[startTransition, isPending]数组。 - 如果需要控制过渡相关的等待或加载状态逻辑,得通过
isPending结合自定义定时器实现,比如isPending为true时延迟显示加载提示,或者控制加载提示的最小展示时长。
示例代码(当前正确用法):
const [startTransition, isPending] = React.useTransition(); React.useEffect(() => { startTransition(() => { // 在这里执行状态更新操作 }); }, [stateValue, startTransition]);
内容的提问来源于stack exchange,提问作者Jose Cipriano Neto
相关产品推荐
相关产品推荐

