react click handler不能正常工作



有一个点击处理程序,有2个语句,其中只有一个工作,当我注释掉其中一个时,另一个工作正常。setshowdeletecconfirm是本地状态。setdeletemmodal是context。为什么会这样?

<FaTrashAlt onClick={(e) => {
          setShowDeleteConfirm(!showDeleteConfirm);
          setDeleteModal(!deleteModal);
          e.stopPropagation();
          
          }}/> 

这样做的原因是setState()在本质上是异步的,我们不知道何时执行一个。这就是为什么会发生这种情况。

假设你有这两个集合函数。

  setShowDeleteConfirm(!showDeleteConfirm);
  setDeleteModal(!deleteModal);

setShowDeleteConfirm(!showDeleteConfirm);开始执行时,我们无法预测它何时会更新状态,因为这本质上是异步的,其他情况也是如此。干杯! !

我觉得一个快速的解决方案是在Hook中使用callback。

<FaTrashAlt onClick={(e) => {
          setShowDeleteConfirm( (prevState) =>{
               return {
                    showDeleteConfirm:!prevState
               }
           } );
          setDeleteModal( (prevState) => {
                return{
                deleteModal:!prevState
               });
           }
          e.stopPropagation(); // I feel this should not be used, it has no purpose here.
          
          }}/> 

当您基于先前的值更新状态时,最好使用函数模式。这可以帮助我们为之前的状态提供一个可预测的值。

 <FaTrashAlt onClick={(e) => {
          setShowDeleteConfirm( showDeleteConfirm => !showDeleteConfirm);
          setDeleteModal( deleteModal => !deleteModal);
          e.stopPropagation();
          
          }}/>