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(),
            }
      );

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

 

posted @ 2020-11-30 16:30  程序員劝退师  阅读(2181)  评论(0编辑  收藏  举报