In my app, I have a RoomsContainer parent component, which has an array of Room child components. In Room, I want there to be a button to add additional Room elements to the RoomsContainer by calling the parent component's addRoom function.
This is what I have:
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>
)
}
This adds the first room on page load, however when I click on the Add Room button in the Room component, it doesn't add any additional rooms. Clicking it also appears to re-render the entire RoomsContainer component completely with a new Room element instead of modifying its state. Also console.log(rooms) always displays an empty array, even right after setting it.