React的Table组件在更新dataSource时,未重新渲染页面

本文探讨了在React中如何正确更新状态以触发Table组件的重新渲染。通过对比直接修改引用与创建新引用的方式,解释了为什么前者无法使Table组件响应状态变化,而后者可以。同时,提到了Table组件在每次重新渲染时,其columns属性也会被重新渲染。
摘要由CSDN通过智能技术生成

1. 由于dataSource是list对象,如果采用如下方法,则只是操作引用:

  handleDataSource = () => {
    let temp = this.state.dataSource;    
  
    temp.push({
      id: 'a',
      key: 'a',
      jobName: 'a',
      jobGroup: 'a',
      jobStatus: '2', 
      owner:'zs',
      desc: 'desc',
    });

    this.setState({
      dataSource : temp,
    });
   
  }

temp.push其实就是相当于this.state.dataSource.push,引用没有改变,只是改变了引用指向的内存数据,React认为虚拟DOM并没有改变,因此,不会重新渲染页面。这就会导致Table组件的dataSource改变了,但是Table并没有重新渲染。

2.更新代码如下:

  handleDataSource = () => {
    let temp = [...this.state.dataSource];    
  
    temp.push({
      id: 'a',
      key: 'a',
      jobName: 'a',
      jobGroup: 'a',
      jobStatus: '2', 
      owner:'zs',
      desc: 'desc',
    });

    this.setState({
      dataSource : temp,
    });
   
  }

重新建一个list对象,这时temp的引用和this.state.dataSource的引用不同,在this.setState方法中,React认为是改变了dataSource,因此会重新渲染页面。

3. 每次重新渲染Table时,Table的columns也会重新渲染。

 

 

 

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值