@historydev
Редактирую файлы с непонятными расширениями

Можно ли использовать несколько состояний в хуках и как?

Доброй ночи. Скажите пожалуйста как я могу использовать несколько состояний в хуках?

Этот компонент должен возвращать меню категорий, так-же при выборе мода настроек он должен будет сохранять выбранные значения и выдавать список, я добавил новое состояние data и сделал всё аналогично с nav, но это не работает для меня:

export default function GetCategory({mode}) {

    let [nav, setNav] = useState([]);
    let [data, setData] = useState([]);

    let navSettings = [];

    const selectCategoryItem = (e) => {

        navSettings.push(e.target.innerText);

        navSettings = [...new Set(navSettings)];
        
        console.log(navSettings);

        e.target.closest('.globalSelect').querySelector('li:nth-child(1)').innerText = `${e.target.innerText}`;

    };

    const getData = () => {

        setData(navSettings);

        console.log(data)

    };

    const getMenu = async() => {

        let menu = await fetch('http://localhost:4000/menu', {method: 'post'});
        menu = await menu.json();

        return setNav(menu)

    };

    const UseMenu = ({element}) => element.map(el => (
        <ul className='select' onClick={(e) => selectCategoryItem(e)}>
            <li> {el.title} </li> <i className='fas fa-chevron-down' />
            <div className="selectContent">
                {el.children ? el.children.map(ch => (
                    <ul className='select' onClick={(e) => selectCategoryItem(e)}>
                        <li> {ch.title} </li> <i className='fas fa-chevron-down' />
                        <div className="selectContent">
                            {ch.children ? ch.children.map(ch2 => (<li>{ch2.title}</li>)):''}
                        </div>
                    </ul>
                )):''}
            </div>
        </ul>
    ));

    const selectClick = (e) => {

        e.target.closest('.select').querySelector('li:nth-child(1)').style.fontWeight =
            e.target.closest('.select').querySelector('li:nth-child(1)').style.fontWeight === '' ? 'bold' : '';

        return e.target.closest('.select').querySelector('.selectContent').style.display =
            e.target.closest('.select').querySelector('.selectContent').style.display === '' ? 'flex' : '';

    };

    useEffect(() => {
        getData();
        getMenu();
    }, []);

    return (
        <div className='selectHome'>
            <ul className='select globalSelect' onClick={(e) => selectClick(e)}>
                <li> Выберите категорию </li> <i className='fas fa-chevron-down' />
                <div className="selectContent">
                    <UseMenu element={nav} />
                </div>
            </ul>
            <div className="settings">
                {data.map(el => el)}
            </div>
        </div>
    )

}


Спасибо.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы