Вот код и песочница, разветвленная от вашего:
https://codesandbox.io/s/competent-wildflower-n0hb8
Я изменил его так, чтобы вместо чего-то вроде этого:
let [allExpanded, setAllExpanded] = useState(true)
У вас есть что-токак это:
let [whichExpanded, setWhichExpanded] = useState({0: true, 1:true, 2: true})
Затем, для вашего обратного вызова, чтобы развернуть / свернуть все кнопки, у вас есть это:
<button onClick=()=>{
let newState = {}
for(let order in whichEpanded){
newState[order] = false //change every key to false
}
setAllExpanded(newState)
}> hide all</button>
Затем я передал реквизит «порядка» вашемуПредметы.Свойство "order" используется в качестве аргумента для функции обратного вызова, которую я передаю, поэтому, когда вы нажимаете на каждый элемент, он обновляет состояние whichExpanded, чтобы переключать видимость только этого одного элемента.
// pass this to eac of the items:
const setIndividualItemExpanded = order => {
let newItemsExpandedState = { ...itemsExpanded };
newItemsExpandedState[order] = !newItemsExpandedState[order];
setItemsExpanded(newItemsExpandedState);
};
Каждый компонент элемента:
<Item
expanded={itemsExpanded[0]} //is reading from the state
order={0}
setExpanded={setIndividualItemExpanded}
/>
Затем вы можете удалить useState из визуализированного компонента и просто обновить его с помощью "setExpanded" prop
(полный код в кодах и коробке вставлен сверху)