- Предположим, что у меня есть класс React P, который отображает два дочерних класса C1 и C2.
- C1 содержит поле ввода. Я буду ссылаться на это поле ввода как Foo.
- Моя цель - позволить C2 реагировать на изменения в Foo.
Я придумал два решения, но ни один из них не чувствует себя совершенно правильно.
Первое решение:
- Назначить P состояние,
state.input
. - Создайте функцию
onChange
в P, которая принимает событие и устанавливаетstate.input
. - Передайте этот
onChange
в C1 какprops
, а C1 свяжитеthis.props.onChange
сonChange
Foo.
Это работает. Всякий раз, когда изменяется значение Foo, он вызывает a setState
в P, поэтому P будет иметь вход для перехода к C2.
Но по той же причине это не совсем правильно: я устанавливаю состояние родительского элемента из дочернего элемента. Это, по-видимому, предает принцип проектирования потока данных: однонаправленный поток.
Является ли это тем, как я должен это делать, или существует ли более естественное решение React?
Второе решение:
Просто поместите Foo в P.
Но это принцип дизайна, которому я должен следовать, когда я создаю приложение для всех элементов формы в render
класса самого высокого уровня?
Как и в моем примере, если у меня есть большой рендеринг C1, я действительно не хочу ставить целое render
из C1 в render
из P только потому, что C1 имеет элемент формы.
Как мне это сделать?