#独家
请问下,为何不能setTracerouteMsgs(prev => {xxx} 这样设置状态呢?

2023-08-09 0 2,777

请问下,为何不能setTracerouteMsgs(prev => {xxx} 这样设置状态呢?

const [tracerouteMsgs, setTracerouteMsgs] = useState<TraceRouteMsg[]>([])

useEffect(() => {
  console.log('result: ', tracerouteMsgs)  // 这里不打印
}, [tracerouteMsgs])
...

 <div>
    <Button onClick={() => {

      const tmpTracerouteMsgs = tracerouteMsgs

      tmpTracerouteMsgs.push({
        key: tracerouteMsgs.length + 1,
        msg: []
      })

      setTracerouteMsgs(tmpTracerouteMsgs)

      const key = tracerouteMsgs.length

      global.ipcRenderer.send('traceroute-from-render', '8.8.8.8', key)

      global.ipcRenderer.on(`traceroute-from-main-${key}`, (_, data) => {
        console.log('mmkk: ', key, data)
        setTracerouteMsgs(prev => {
          const tmpPrev = prev 
          tmpPrev[1].msg =  tmpPrev[1].msg.concat(data)
          console.log('tmpPrev2:', tmpPrev)
          return tmpPrev
        })
      })

    }}>traceroute2测试</Button>

    <span>tracetoute2结果:</span>

    {
      tracerouteMsgs[1]?.msg.map((item, index) => (
       <>
        <span key={index}>{item}</span> <br/>
       </>
      )) 
    }    
</div>

主要是这段代码的setTracerouteMsgs貌似不生效:

setTracerouteMsgs(prev => {
  const tmpPrev = prev 
  tmpPrev[1].msg =  tmpPrev[1].msg.concat(data)
  console.log('tmpPrev2:', tmpPrev)
  return tmpPrev
})

是否不应该 return tmpPrev 还是怎么的呢?

我测试了简单的数据结构设置如:

const [tracerouteMsgs, setTracerouteMsgs] = useState([])
...
setTracerouteMsgs(prev => prev.concat(3))

这样可以生效。

但是为何修改内部的内容再设置就不生效呢?

setTracerouteMsgs(prev => {
  const tmpPrev = [...prev];
  tmpPrev[1] = {
    ...tmpPrev[1],
    msg: tmpPrev[1].msg.concat(data)
  };
  console.log('tmpPrev2:', tmpPrev);
  return tmpPrev;
});
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 请问下,为何不能setTracerouteMsgs(prev => {xxx} 这样设置状态呢? https://www.jkxiazai.com/2445.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务