React 数组变化不引起视图更新?


const [receiveData, setReceiveData] = React.useState([
      {
         key:1,
         paymentId:'',
         paymentName:'',
         paymentAccount:'',
         paymentInfo:'',
         paymentAmount:'',
      },{
 key:2, paymentId:'', paymentName:'', paymentAccount:'', paymentInfo:'', paymentAmount:'', },
]);

根据以上代码我们想要修改数组中某条数据然后交给react去渲染,

const newReceive = receiveList.map(item =>
    item.key === key ?
         {
             ...item,
             paymentId: item.paymentId ?? '',
             paymentName: item.paymentName ?? '',
             paymentAccount: item.paymentAccount ?? '',
             paymentInfo: item.paymentInfo ?? ''
          } : {
             ...item,
          }
     );

我们会发现页面没有变化,但是可以在页面中打印出数据已经变化,页面没有重新渲染;

导致这个问题的原因主要是,我们在变更数据的时候key没有变化,我们把数据传递给组件,组件恰好用的就是这个key设置react的唯一key由于key没有变化,所有页面没有更新

需要修改写法,建议每次修改数据都要把key进行变化

const keyStr = () => Math.random().toString(36).substr(2);

 const receiveList = [...receiveData];
      const newReceive = receiveList.map(item =>
         item.key === key ?
            {
               ...item,
               key: keyStr(),
               paymentId: item.paymentId ?? '',
               paymentName: item.paymentName?? '',
               paymentAccount: item.paymentAccount?? '',
               paymentInfo: item.paymentInfo?? ''
            } : {
               ...item,
               key: keyStr(),
            }
      );

这样我们就可以手动修改可以进行变化,页面就会重新渲染了

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM