react 的 setState 用来自增, 是线程安全的吗?

查看 63|回复 5
作者:bthulu   
从后台订阅 websocket, 然后自增本地 state.
如果后台同时发了多个请求过来要求自增 state, 会出现线程安全问题吗?
yidadaa   
js 是单线程。
foolishcrab   
用接收函数那个重载
thinkershare   
不会,浏览器上的 JS 是单线程的,运行在一个消息事件循环里面,不可能有并行问题。如果有并行问题,JS 就需要提供同步的原语,但实际 JS 并没有这个玩意,也没有支持它的标准库接口。
Epiloguess   
react 的 state 是通过闭包来实现的,理论上线程安全,但是有一些要注意
1,使用 state 的更新函数来获取和更新 state 的最新值,否则 react 的批处理可能会导致一些错误
2.将 state 的改变尽量控制在一个小的组件里,react 可能不会立即清除你之前的状态除非组件被卸载,对于一个较大的组件,短时间大量的更新可能会导致内存方面的问题
3.建议使用全局状态,本地存储,asynclocalstorage(服务端渲染)来解决问题
userdhf   
你这个问题,让我想起之前很早写过的 bug ,a 组件开定时器轮询接口,然后 a 组件在 x 、y 两个页面上均被使用,然后 x 页面发出的请求,因为网络延时,在 y 页面上渲染...不知道是不是你这种类似的问题,
我使用 axios ,每次轮询前先 abort 掉前一个请求;或者 a 组件放在 state 中,渲染这个 state
您需要登录后才可以回帖 登录 | 立即注册

返回顶部