【发布时间】:2021-06-24 23:56:48
【问题描述】:
我正在尝试创建高性能的复选框树组件。我有一个父级状态来保存选中复选框 ID 的列表 =>
const [selected, setSelected] = useState([]);
当切换复选框时,它的 ID 会添加到该数组或从该数组中删除。我将布尔值传递给控制选中状态的每个复选框 =>
checked={selected.includes(hole.id)}
Checkbox -input 被分离到一个自己的 CheckboxNode 组件中。
当不为 CheckboxNode 组件使用React.memo 时,我总是可以看到来自同一个父级的每个复选框触发console.log(),即使只有一个被单击/切换
当使用 React.memo 并进行以下检查时,我在切换复选框时看到 1-3 个渲染 =>
const areEqual = (prev, next) => prev.checked === next.checked;
此外,视觉状态的变化非常特别,组件感觉非常有问题。
如何在这样的设置中获得出色的性能并摆脱额外的渲染?我在这里添加了代码,以便任何人都可以更好地查看:https://codesandbox.io/s/shy-frog-4wjrg?file=/src/CheckboxNode.js
【问题讨论】:
标签: javascript reactjs checkbox react-hooks