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