Суть вашего вопроса, кажется, вращается вокруг анти-паттерна , который должен взять несколько реквизитов и скопировать их в состояние .Это, мутирование реквизита, не является целью государства.Реквизит являются неизменными, обманывая их, государство побеждает этот дизайн.
Цель состояния - управлять вещами, которые являются специфическими для компонента React, то есть строго ограничены только этим компонентом React.Например, переключатель showHide для отображения чего-либо в компоненте React.Думайте о состоянии как о локальной переменной, если это помогает.
Большую часть времени этот антишаблон дублирования реквизита может быть удовлетворен функцией внутри объекта React.Например, ваша переменная state.full_name становится именованной функцией fullName, связанной с компонентом React.(все примеры кода предполагают синтаксис JSX)
Примечание: в JavaScript верблюд является структурой именования функций и переменных, я предполагаю, что вы используете ruby на основе соглашения об именах подчеркивания.ИМО, лучше придерживаться соглашения языка, на котором вы пишете код.Вот почему я использую именование на основе верблюдов.
...
fullName() {
return this.props.firstName + " " + this.props.lastName
}
...
Эта функция затем может быть вызвана при рендеринге компонента
# in render() portion of your React component, assuming jsx syntax
<p>Hello, {this.fullName()}</p>
Примечание. Помните, что в ES6вам нужно связать методы вашего класса реакции в конструкторе или использовать синтаксис =>, чтобы их можно было вызывать с помощью этого.
...
constructor(props) {
super(props);
this.fullName = this.fullName.bind(this);
}
...
Вы также можете разложитьсоответствующие части нового компонента с именем FullName , если он будет использоваться несколькими компонентами.
<FullName firstName={this.props.firstName} lastName={this.props.lastName} />
Технически, «способ реагирования» - это, по крайней мере, по мнению автора, разложить это на другой компонент для повторного использования.Однако повторное использование компонентов необходимо сопоставлять с добавленной сложностью, то есть не оптимизировать преждевременно.Таким образом, вы можете не захотеть зайти слишком далеко вначале.Время, когда это необходимо, возникнет естественным образом.
Очень широкое обобщение реквизита React заключается в том, что они гарантированы, неизменны и стекают, как водопад, из самого верхнего компонента.Если вам нужно обновить их, обновите их на самом высоком уровне, где это имеет смысл.
В подходе, основанном на простом React, если у вас есть что-то, о чем нужно знать родителю, «поднимите» эту часть кода до родителя и, наоборот, привяжите его к ребенку в качестве подпорки.Например, функция AJAX, которая вызывает API.Я думаю об этом как о попытке сделать компоненты как можно более тупыми .
Родитель становится «источником правды» для предмета, который вы «подняли».Родитель обрабатывает обновления, а затем передает результаты дочерним элементам.Таким образом, в родительском объекте он может существовать как переменная состояния, а затем передаваться как реквизиты дочернему объекту, который затем передает его как реквизиты дочернему объекту и т. Д. Дети обновляются по мере изменения состояния в их родительском объекте, когдаон распространяется вниз по цепочке в качестве реквизита.
Если ваше приложение имеет только React, то есть нет магазинов, которые управляют объектами, такими как в потоковом или избыточном шаблонах, вам, возможно, придется хранить вещи в состоянии самого верхнего объекта, что технически можно было бы считать плохим.По мере того, как ваша система становится все более сложной, эта функциональность будет лучше обрабатываться частями потока или избыточности.
Надеюсь, это поможет!