为什么更新我的列表不会触发我的组件的重新渲染?

Why doesn't updating my list trigger a re-render of my component?

鉴于下面的代码,我希望在单击按钮时看到一个新的列表项添加到 。状态数据似乎已更新,但 DOM 未更改。我承认我是 React 和 Hooks 的新手所以希望这只是我不理解这里的绑定模型的问题。


import React, {useState,useEffect} from 'react';
import './App.css';

function App() {

  const [someList, setSomeList] = useState([]);

  useEffect(() =>
    {
      const someDataForTheList = [1,2,3];
      setSomeList(someDataForTheList);
    }, []);

  const onClickAddToList = () =>
      {
        let newDataForTheList = someList;
        newDataForTheList.push(someList.length + 1);

        setSomeList(newDataForTheList);

        console.log(someList);
      }

  return (
    <div className="App">
        <h1>{someList ? someList.length : null}</h1>
        <ul>
          {someList ? someList.map((i) =>
              <li key={i}>
                {i}
              </li>)
              : null}
        </ul>
        <button onClick={onClickAddToList}>Add to list</button>
    </div>
  );
}

export default App;


这是因为 React 在检查更新时不会进行深度检查(默认情况下)。所以在同一个列表上推送一个新项目,然后使用钩子的调度方法重新分配它 React 确定这是相同的 object/item,因此得出结论视图不必更新。

但是您可以执行以下操作:

const onClickAddToList = () => {
  // creating a new list
  const newDataForTheList = [...someList, someList.length + 1];
  setSomeList(newDataForTheList)
}