2 回答

TA贡献1829条经验 获得超7个赞
这里的问题不在于组件未能添加到阵列中。问题在于它的添加方式。
根据文档。你不应该直接改变状态。由于状态是一个变异操作,因此状态正在发生变异,因此重新渲染可能不起作用。
始终创建一个新数组,然后将旧部分和新部分合并在一起。
const textButtonHandler = () => {
const key = blocks.length;
// This should work
setBlocks([...blocks, <TextBlock key={key} />]);
// Code below should also work, because concat does not mutate original state
// const array = blocks;
// array.concat(<TextBlock key={key} />);
// setBlocks(array);
};

TA贡献1785条经验 获得超4个赞
React 状态管理使用shallow comparison。基于比较,它更新状态并重新渲染组件。如果引用相同,则不会进行渲染。
let array = blocks; //It create reference to array block.
//即使我们将元素推入数组,我们也不会改变状态块
array.push(<TextBlock key={key} />); // still array and block having same reference
setBlocks(array); // this will passed the same array reference
由于参考相同,因此没有突变。因此,没有状态更新,因此没有重新渲染。
要使其工作,请进行以下更改。
改为setBlocks(array);使用setBlocks([...array]);
或者
let array = [...blocks];
添加回答
举报