@hjolming
Грузчик с красным дипломом технаря

Как поменять состояние одного компонента, реагируя на событие в другом в React?

Проблема такая:
Есть дерево компонентов
App -> Board -> Row -> Section
-> SideBlock -> ResetButton
Задумка такая:
По клику на ResetButton(там только одна кнопка) состояние Board сбрасывается(ну, или она просто перерисовывается с нуля).
Передавать свойства из Board и Row в Section, чтобы работать с ними - я понял как.
А сделать так, чтобы Board реагировал на клик в ResetButton - нет.

В документации было описано, что функцию, которая будет отвечать за смену состояния нужно прописать в App(главном родителе) и передавать вниз до ResetButton. Консоль на такое ругается и говорит, что я где-то передаю объект, а не функцию. Нет такого, там везде по дереву свойством передаётся функция.
Если её описать в ResetButton, то всё ок, оно меняет состояние доски, но, кажется, только для свойства кнопки.
ЧатГПТ и документация не помогли. Не надо тут токсичить, мне реально нужна помощь, ибо я не понимаю чего-то очень простого.

https://pastebin.com/gYY9ER6h - это предложение от чатГПТ, при такой реализации я получаю ошибку, что передаю объект вместо функции
https://pastebin.com/fQXPwHJU - это я пытался хоть как-то изменить состояние Board, но оно, кажется, не меняется. Там есть лишние логи, да, я знаю, что они не отработают, но в js оказалось сложнее дебажить, чем в джаве)

Есть ли способ изменить состояние Board из компонента ResetButton?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 2
@hjolming Автор вопроса
Грузчик с красным дипломом технаря
Может кому поможет. Нет, функцию передавать как свойства между компонентами так и не вышло(хотя должно было). Зато можно передавать свойство.

Теперь в структуре
App -> Board -> Row -> Section
.......\ -> SideBlock -> ResetButton
. Key не передаётся, зато передаётся id.

Это выглядит как:
App(key,id) -> Board -> Row -> Section
.................\ -> SideBlock(id) -> ResetButton(id)
где id - передаётся по структуре ниже.
В ResetButton есть функция, которая по клику изменит id и отрендерит .
И всё, работает) Ну, полагаю, что решение так себе. На досуге подумаю что там с функциями было, может я просто где-то проглядел(скорее всего).
Ответ написан
Комментировать
@HungryGrizzzly
Сумасшедший кросс
Рекомендую обернуть все в контекст и использовать его для менеджмента состояния https://kentcdodds.com/blog/how-to-use-react-conte...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы