react中 一个state数组某元素属性发生变化时,setState页面不更新

       写代码过程中,你会发现,如果直接使用push等方法改变state,按理来说,push会改变原数组,数组应该更新,但渲染出来的state并不会更改。

今天遇到的问题是:组件内对数组元素进行修改后数据有变化但是页面没重新渲染
话说这是因为组件没能够识别数组的变化,所以页面没有重新渲染
所以只要让组件感知到你发生了改变,就可以达到刷新的效果

原因:

这是由于js中,数组的赋值是引用传递的,array.push相当于直接更改了数组对应的内存块,但react内部用于对比的array的内存并没有更改,是指向同一个内存的,setState只做shallow compare,因此没有触发re-render。
可以使用扩展运算符,创建一个新数组,更改内存引用

需求:

解决办法:解构后重新赋值 

const onClick = (key) => {// tab点击函数
    if (key === 'addTab') {
      panes.push({
        key: panes.length,
        tab: `筛选记录${panes.length + 1}`
      })
      setPanes([...panes])
    }
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在React数组的形式接收从SignalR传来的随间不断变化的单个Number类型数据,你可以首先在React组件定义一个state来存储数据数组,然后通过SignalR的回调函数将新的数据添加到数组。具体实现步骤如下: 1. 在React组件定义一个state来存储数据数组,例如: ``` class MyComponent extends React.Component { constructor(props) { super(props); this.state = { data: [] }; } // ... } ``` 2. 在组件的componentDidMount()生命周期方法连接SignalR,并且在连接成功后注册一个回调函数来接收数据。例如: ``` componentDidMount() { const connection = new signalR.HubConnectionBuilder() .withUrl("/myHub") .build(); connection.start().then(() => { console.log("SignalR connected"); connection.on("newData", (value) => { this.setState(prevState => ({ data: [...prevState.data, value] })); }); }); } ``` 在上面的代码,我们连接到名为“myHub”的SignalR hub,然后在连接成功后注册一个名为“newData”的回调函数。每当从SignalR接收到新的数据,该回调函数会将新的数据添加到数据数组。 3. 在组件的render()方法使用数据数组来渲染UI。例如: ``` render() { const { data } = this.state; return ( <div> <ul> {data.map((value, index) => ( <li key={index}>{value}</li> ))} </ul> </div> ); } ``` 在上面的代码,我们使用数组的map()方法来遍历数据数组,然后为每个数据项渲染一个<li>元素。注意要给每个<li>元素设置一个唯一的key属性,这里我们使用数据项在数组的索引作为key。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值