Как создать динамическое состояние для множественного коллапса с помощью КРЮЧКА?

#reactjs

Вопрос:

Итак , я много борюсь, потому что я новичок в реагировании, и я еще не знаю, как управлять несколькими состояниями

Я пытаюсь открыть только один коллапс за раз

На данный момент у меня есть два компонента, один только для вставки данных в меню ниже и один для управления всем кодом, я хочу, чтобы мой код масштабировался, поэтому, когда я добавляю узел, я создаю новый элемент, сопоставляя массив.

Итак, моя проблема заключается в следующем: как несколько элементов сворачивания не открываются одновременно?

Вот пример кода [я не могу вставить исходный код, потому что он закрытый]

 const  menu={[
                    {
                        id: 0,
                        label: 'Dashboard',
                        icon: <DashboardIcon />,
                        nested:false,
                       

                    },
                    {
                        id: 1,
                        label: 'Products',
                        icon: <ViewListIcon />,
                        nested:false,
                     
                    },
                    {
                    
                    {
                        id: 3,
                        label: 'Grid',
                        icon: <GrindOnIcon />,  
                        nested:true,
                        nestedItems: [
                            { id:1,
                              icon: <ClassIcon/>,
                              label: 'Class',
                               
                            },
                        ]
                    },
                        ]

                    },
                   
                ]}
function Menu (){

  const [collapsed, setCollapsed] = useState([]);

    const handleClick = (id) => {
       ?
    } 

  return(  {

                        menu.map((obj, index) => (

                            <>
                                {
                                    obj.nested === false amp;amp;
                                    <ListItem className={classes.list} button key={index} >
                                        <Link className={classes.listLink} to={obj.url}>
                                            <ListItemIcon className={classes.icon}> {obj.icon}</ListItemIcon>
                                            <ListItemText className={classes.label} secondary={obj.label}></ListItemText>
                                        </Link>
                                    </ListItem>

                                }
                                {
                                    obj.nested === true amp;amp;
                                    <> 
                                   
                                        <ListItem className={clsx(classes.list, classes.listLink)} button key={index} 
                                        onClick={} >
                                            <ListItemIcon className={classes.icon}> {obj.icon}</ListItemIcon>
                                            <ListItemText className={classes.label} secondary={obj.label}></ListItemText>

                                            { collapsed ? <ExpandLessRoundedIcon className={classes.icon} /> : <ExpandMoreRoundedIcon className={classes.icon} />}
                                        </ListItem>
                                            <Collapse   in={?} timeout="auto" unmountOnExit>
                                            {obj.nestedItems.map((item,i) => (
                                                <List disablePadding >
                                                    <ListItem button className={classes.nested} key={item.id}>
                                                        <Link className={classes.listLink} to={item.url}>
                                                            <ListItemIcon className={classes.icon}> {item.icon}</ListItemIcon>
                                                            <ListItemText className={classes.label} secondary={item.label}></ListItemText>
                                                        </Link>
                                                    </ListItem>
                                                </List>
                                                ))}
                                            </Collapse>
                                        
                                    </>
                                }

                            </>


                        ))}
)

 

Я видел много решений, использующих компонент класса, но мне действительно нужно решение с использованием крючков и масштабируемой
помощи plz

Комментарии:

1. создайте отдельный компонент для каждого элемента и используйте локальное состояние внутри него