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];
添加回答
舉報