const [isItemExpand, setIsItemExpand] = useState([{ ind: 0, isExpand: false }])
this is my function to make related state true
const handleExpand = (i: number) => { const newList = [...isItemExpand] newList[i] = { ind: i, isExpand: !isItemExpand[i].isExpand } setIsItemExpand(newList) }
I need to make index related state true while at the same time states not equal to index need make false, How can I achieve that in the same function above
as a example – in current condition, if I expand (index 1), then expand (index 2) my array looks like
0: {ind: 0, isExpand: false} 1: {ind: 1, isExpand: true} 2: {ind: 2, isExpand: true} 3: {ind: 3, isExpand: false}
but after expanding (index 2) I expect array like this
0: {ind: 0, isExpand: false} 1: {ind: 1, isExpand: false} 2: {ind: 2, isExpand: true} 3: {ind: 3, isExpand: false}
to achieve this i need to reset all other states to false expect which matches with index
Advertisement
Answer
If I understand the goal correctly – that only one element should have isExpand = true
– then you can map
the items and set false
or true
depending on the ind
condition
const handleExpand = (i: number) => { const newList = isItemExpand.map((item) => ({ ...item, isExpand: item.ind === i })); setIsItemExpand(newList); };
updated
const handleExpand = (i: number) => { const newList = isItemExpand.map((item) => ({ ...item, isExpand: (item.ind === i) ? !item.isExpand : false }); setIsItemExpand(newList); };