【发布时间】:2020-11-12 08:50:07
【问题描述】:
在我的应用程序中,我有一个 RoomsContainer 父组件,它有一个 Room 子组件数组。在Room 中,我希望有一个按钮,可以通过调用父组件的addRoom 函数向RoomsContainer 添加额外的Room 元素。
这就是我所拥有的:
function RoomsContainer() {
const [rooms, setRooms] = useState([]);
const addRoom = () => {
var uniqid = require('uniqid');
let key = uniqid("room-");
setRooms([
...rooms,
<Room
key={key}
id={key}
addRoom={addRoom}
removeRoom={removeRoom}
/>
]);
console.log(rooms);
}
useEffect(() => {
addRoom();
}, []);
// ...
return (
<div id="room-wrapper">
{rooms}
</div>
)
}
function Room(props) {
// ...
return (
<button onClick={props.addRoom}>
Add room
</button>
)
}
这会在页面加载时添加第一个房间,但是当我单击 Room 组件中的 Add Room 按钮时,它不会添加任何其他房间。单击它似乎还会使用新的Room 元素完全重新渲染整个RoomsContainer 组件,而不是修改其状态。同样console.log(rooms) 总是显示一个空数组,即使在设置之后也是如此。
【问题讨论】:
-
@SergedeGossondeVarennes 我看不出这个问题是如何重复的。我没有使用
React.Fragment,我没有使用map,并且我将一个空的第二个参数传递给useEffect。能不能说的具体点? -
对不起。读错了!
标签: reactjs react-hooks state