为什么即使状态发生了变化,应用也不会重新渲染?

问题描述 投票:0回答:1

我正在更新状态数组,如下所示

const clearPath = () => {
    const newGrid = grid.map((row) => {
      return row.map((node) => {
        if (node.isVisited) {
          node.isVisited = false;
          node.previousNode = null;
        }
        return node;
      });
    });

    setGrid(newGrid);
    //console.log(grid);
  };

将其渲染为

return (
<div>
<div>
    <button className="btn" onClick={() => clearPath()}>
    <span>Clear</span>
    </button>
</div>
<div className="arena">
    {grid.map((row, i) => (
    <div key={i} className="row">
        {row.map((node, j) => {
        const { row, col, isStart, isEnd, isWall, isVisited } = node;

        return (
            <Node
            key={j}
            col={col}
            row={row}
            node={node}
            isEnd={isEnd}
            isStart={isStart}
            isWall={isWall}
            isVisited={isVisited}
            mouseIsPressed={mouseIsPressed}
            onMouseDown={(row, col) => {
                handleMouseDown(row, col);
            }}
            onMouseEnter={(row, col) => {
                handleMouseEnter(row, col);
            }}
            onMouseUp={() => handleMouseUp()}
            ></Node>
        );
        })}
    </div>
    ))}
</div>
</div>
);

使用clearpath函数,我能够修改状态,但应用程序没有重新渲染。为什么会出现这种情况?只有当状态改变时才会重新渲染,对吗?

reactjs react-state-management
1个回答
1
投票

你正在用 node.isVisited = false; 如果Node是一个纯组件,会导致Node组件都不会被重新渲染。

return row.map((node) => {
  if (node.isVisited) {
    return {...node, isVisited : false,previousNode : null};
  }
  return node;
});
© www.soinside.com 2019 - 2024. All rights reserved.