javascript - useState 不会在数组状态上使用 push、unshift 和 pop 重新渲染

标签 javascript reactjs

我正在尝试更新使用 useState 创建的 usersData 变量,以便每当有人单击“添加用户”时,都会将数据对象添加到 usersData 的开头,但问题是它仅适用于扩展运算符,不适用于推送、pop 或 unshift 操作,如下面的代码所示。

下面的代码运行良好,每次 usersData 更改时它都会更新并重新渲染:

const [usersData, setUsersData] = useState([]);

  const receiveUserData = (data) => {
    const dataUpdated = [data, ...usersData];
    setUsersData(dataUpdated);
  };

但是,dataUpdated与上面代码具有相同的数据,以下代码不会重新渲染页面:

const [usersData, setUsersData] = useState([]);

  const receiveUserData = (data) => {
    let dataUpdated = usersData;
    dataUpdated.unshift(data);
    setUsersData(dataUpdated);
  };

最佳答案

您的第二次尝试,使用unshift不会导致重新渲染,因为对于React来说,没有任何改变,因为您向提供了相同的引用设置用户数据。事实上,unshift 更新内容而不影响引用;所以dataUpdated === usersData

每次需要更新对象数组以进行重新渲染时,您都需要创建一个新的引用。传播运算符可以做到这一点,这就是您的第一次尝试有效的原因,即:

const [usersData, setUsersData] = useState([]);

const receiveUserData = (data) => {
  const dataUpdated = [data, ...usersData];
  setUsersData(dataUpdated);
};

关于javascript - useState 不会在数组状态上使用 push、unshift 和 pop 重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71123101/

相关文章:

javascript - jquery删除图像上的div

reactjs - 如何以 Redux 形式使用 Action Creators

reactjs - JvectorMap 在 setState reactjs 之后重新渲染正确的标记

javascript - jQuery Fade 对象在 20 秒不活动后

reactjs - 选择数据表中的行(mui-datatable)

reactjs - react 路由器 dom - 链接。如何将 ID 放入链接的路径中

javascript - 如何在 React 中将数组作为结果从一个功能组件传递到另一个功能组件

javascript - knockout 编辑表元素

javascript - 通过ajax将值数组提交到外部php脚本(数据表延迟渲染)

javascript - ReactJS:用于多个表单输入的单个 onChange 处理程序