Я смотрел курс Pluralsight по React, и инструктор заявил, что реквизит менять нельзя. Я сейчас читаю статью (uberVU / реакции-руководство) о реквизитах против состояния, и там говорится
И реквизиты, и изменения состояния запускают обновление рендера.
Далее в статье говорится:
Реквизиты (сокращение от свойств) - это конфигурация Компонента, если хотите, его параметры. Они получены сверху и неизменны.
- Значит, реквизит может меняться, но он должен быть неизменным?
- Когда вы должны использовать реквизит и когда вы должны использовать состояние?
- Если у вас есть данные, в которых нуждается компонент React, должны ли они передаваться через реквизиты или настраиваться в компоненте React через
getInitialState
?
javascript
reactjs
skaterdav85
источник
источник
Ответы:
Реквизит и состояние связаны между собой. Состояние одного компонента часто становится опорой дочернего компонента. Реквизиты передаются дочернему элементу в методе рендеринга родителя в качестве второго аргумента
React.createElement()
или, если вы используете JSX, более знакомых атрибутов тега.Значение состояния родителя
childsName
становится ребенкомthis.props.name
. С точки зрения ребенка, имя опора является неизменным. Если это нужно изменить, родитель должен просто изменить свое внутреннее состояние:и Реакт распространит это для ребенка для вас. Естественный последующий вопрос: что, если ребенку нужно сменить опору? Обычно это делается через дочерние события и родительские обратные вызовы. Ребенок может выставить событие, которое называется, например
onNameChanged
,. Затем родитель подписывается на событие, передавая обработчик обратного вызова.Дочерний объект будет передавать запрошенное новое имя в качестве аргумента обратного вызова события, вызывая, например
this.props.onNameChanged('New name')
, и родитель будет использовать имя в обработчике события для обновления своего состояния.источник
Для общения между родителями и детьми просто пройдите реквизит.
Используйте состояние для хранения данных, необходимых вашей текущей странице, в виде контроллера.
Используйте реквизиты для передачи данных и обработчиков событий в ваши дочерние компоненты.
Эти списки должны помочь вам при работе с данными в ваших компонентах.
Реквизит
государственный
источник
Проще говоря,
Состояние - это локальное состояние компонента, доступ к которому и изменение за пределами компонента невозможно. Это эквивалентно локальным переменным в функции.
Обычная функция JS
Реагировать Компонент
Опоры , с другой стороны, делают компоненты многократно используемыми, предоставляя компонентам возможность получать данные от своих родительских компонентов в виде реквизитов. Они эквивалентны параметрам функции.
Обычная функция JS
Реагировать Компонент
Кредиты: Манодж Сингх Неги
Ссылка на статью: React State vs Props объяснил
источник
Сводка по реквизитам и состояниям, которая мне больше всего нравится, здесь: отреагируйте на эти советы. Ниже отредактированная версия этой страницы:
реквизит против государства
tl; dr Если компоненту необходимо изменить один из его атрибутов в определенный момент времени, этот атрибут должен быть частью его состояния, в противном случае он должен быть просто опорой для этого компонента.
реквизит
Реквизит (сокращение от свойств) является конфигурацией компонента. Они получены сверху и являются неизменными в том, что касается получающего их Компонента. Компонент не может изменить свои реквизиты, но он отвечает за сборку реквизитов своих дочерних Компонентов. Реквизиты не должны быть просто данными - функции обратного вызова могут передаваться как реквизиты.
штат
Состояние - это структура данных, которая начинается со значения по умолчанию при монтировании компонента. Это может быть изменено во времени, главным образом в результате пользовательских событий.
Компонент управляет своим собственным состоянием внутри. Помимо установки начального состояния, он не имеет дела с состоянием своих детей. Вы можете осмыслить состояние как частное для этого компонента.
Смена реквизита и состояния
Должен ли этот компонент иметь состояние?
Состояние не является обязательным. Поскольку состояние увеличивает сложность и снижает предсказуемость, компонент без состояния является предпочтительным. Несмотря на то, что вы явно не можете обойтись без состояния в интерактивном приложении, вам следует избегать использования слишком большого количества Stateful Components.
Типы компонентов
Компонент без состояния Только реквизит, без состояния. Там не так много происходит, кроме функции render (). Их логика вращается вокруг реквизита, который они получают. Это делает их очень легко следить и тестировать.
Компонент Stateful И реквизит, и состояние. Они используются, когда ваш компонент должен сохранять некоторое состояние. Это хорошее место для связи клиент-сервер (XHR, веб-сокеты и т. Д.), Обработки данных и реагирования на пользовательские события. Такая логистика должна быть заключена в умеренном количестве компонентов с сохранением состояния, в то время как вся логика визуализации и форматирования должна переходить вниз во многие компоненты без сохранения состояния.
источники
источник
Так что просто состояние ограничено вашим текущим компонентом, но реквизиты могут быть переданы любому компоненту, который вы хотите ... Вы можете передать состояние текущего компонента в качестве реквизита другим компонентам ...
Также в React у нас есть компоненты без состояния, которые имеют только реквизиты, а не внутреннее состояние ...
Пример ниже показывает, как они работают в вашем приложении:
Родитель (компонент с полным состоянием):
Дочерний элемент (компонент без состояния):
источник
Основное различие между реквизитом и состоянием состоит в том, что состояние является внутренним и контролируется самим компонентом, в то время как реквизиты являются внешними и контролируются тем, что визуализирует компонент.
источник
По сути, разница в том, что состояние - это что-то вроде атрибутов в ООП : это нечто локальное для класса (компонента), которое используется для лучшего описания. Реквизиты подобны параметрам - они передаются компоненту от вызывающего компонента (родителя): как если бы вы вызывали функцию с определенными параметрами.
источник
И состояние, и реквизиты в реагировании используются для управления данными в компоненте, обычно реквизиты устанавливаются родителем и передаются дочерним компонентам, и они фиксируются во всем компоненте. Для данных, которые будут меняться, мы должны использовать состояние. И реквизиты являются неизменными, в то время как состояния изменчивы , если вы хотите изменить реквизиты, вы можете сделать это из родительского компонента, а затем передать его дочерним компонентам.
источник
как я узнал, работая с реагировать.
реквизиты используются компонентом для получения данных из внешней среды, то есть другого компонента (чистый, функциональный или класс) или общего класса или кода JavaScript / машинописного текста
состояния используются для управления внутренней средой компонента означает, что данные изменяются внутри компонента
источник
Props: Props - это не что иное, как свойство компонента, а реагирующий компонент - это не что иное, как функция javascript.
элемент const =;
Вот
<Welcome name="Sara" />
передача объекта {name: 'Sara'} в качестве реквизита компонента Welcome. Для передачи данных из одного родительского компонента в дочерний компонент мы используем реквизиты. Реквизит неизменен. В течение жизненного цикла компонента реквизит не должен меняться (считайте его неизменным).Состояние: состояние доступно только внутри компонента. Для отслеживания данных внутри компонента мы используем состояние. мы можем изменить состояние с помощью setState. Если нам нужно передать состояние ребенку, мы должны передать его как реквизит.
источник
Государственный:
реквизит:
источник
В основном, реквизиты и состояние - два способа, которыми компонент может знать, что и как визуализировать. Какая часть состояния приложения принадлежит состоянию, а какая - какому-либо хранилищу верхнего уровня, больше относится к дизайну вашего приложения, чем к тому, как работает React. Самый простой способ решить, IMO, - подумать, полезен ли этот конкретный фрагмент данных для приложения в целом или это какая-то локальная информация. Кроме того, важно не дублировать состояние, поэтому, если какой-то фрагмент данных может быть рассчитан по реквизиту, он должен быть рассчитан по реквизиту.
Например, допустим, у вас есть какой-то выпадающий элемент управления (который включает стандартный выбор HTML для пользовательского стиля), который может а) выбрать какое-либо значение из списка и б) открыть или закрыть (т. Е. Список параметров отображается или скрывается). Теперь предположим, что ваше приложение отображает какой-то список элементов и фильтр выпадающих элементов управления для записей в списке. Тогда было бы лучше передать значение активного фильтра в качестве пропеллера и сохранить открытое / закрытое состояние локальным. Также, чтобы сделать его функциональным, вы должны передать обработчик onChange из родительского компонента, который будет вызываться внутри выпадающего элемента, и немедленно отправить обновленную информацию (новый выбранный фильтр) в хранилище. С другой стороны, открытое / закрытое состояние может быть сохранено внутри выпадающего компонента, потому что остальная часть приложения на самом деле не заботится, открыт ли элемент управления, пока пользователь фактически не изменит его значение.
Следующий код не полностью работает, ему нужны css и обработка выпадающих событий click / blur / change, но я хотел сохранить пример минимальным. Надеюсь, это поможет понять разницу.
источник
State - это способ реагирования на информацию, хранящуюся в вашем компоненте.
Предположим, у вас есть компонент, который должен получить некоторые данные с сервера. Обычно вы хотели бы сообщить пользователю, обрабатывается ли запрос, произошел ли сбой и т. Д. Это часть информации, которая имеет отношение только к этому конкретному компоненту. Здесь государство вступает в игру.
Обычно лучший способ определить состояние заключается в следующем:
но в последних реализациях реагировать на native вы можете просто:
Эти два примера выполняются точно так же, это просто улучшение синтаксиса.
Итак, что отличается от простого использования атрибутов объекта, как у нас всегда в ОО-программировании? Обычно информация, хранящаяся в вашем штате, не должна быть статичной, она будет со временем меняться, и вашему представлению потребуется обновить, чтобы отразить эти изменения. Государство предлагает эту функциональность простым способом.
Государство ДОЛЖНО БЫТЬ НЕМНОГО! и я не могу уделять этому достаточно внимания. Что это значит? Это означает, что вы никогда не должны делать что-то подобное.
Правильный способ сделать это:
При использовании this.setState ваш компонент проходит цикл обновления, и если какая-либо часть состояния изменяется, ваш метод визуализации компонента будет вызван снова, чтобы отразить эти изменения.
Проверьте документы для получения более подробного объяснения: https://facebook.github.io/react/docs/state-and-lifecycle.html
источник
Реквизит просто является сокращением для свойств. Реквизит - это то, как компоненты общаются друг с другом. Если вы вообще знакомы с React, то вам следует знать, что реквизиты текут вниз от родительского компонента.
Существует также случай, когда вы можете использовать реквизиты по умолчанию, чтобы реквизиты были установлены, даже если родительский компонент не пропустил реквизиты.
Вот почему люди называют React однонаправленным потоком данных. Это займет немного времени, и я, вероятно, позже напишу об этом в блоге, но сейчас просто помните: данные передаются от родителя к потомку. Реквизит являются неизменными (причудливое слово для этого не меняется)
Итак, мы счастливы. Компоненты получают данные от родителя. Все отсортировано, верно?
Ну, не совсем. Что происходит, когда компонент получает данные от кого-то, кроме родителя? Что если пользователь вводит данные непосредственно в компонент?
Ну, вот почему у нас есть государство.
ШТАТ
Реквизит не должен меняться, поэтому состояние повышается. Обычно компоненты не имеют состояния и поэтому называются не имеющими состояния. Компонент, использующий состояние, называется состоянием. Не стесняйтесь бросать этот маленький кусочек на вечеринках и смотреть, как люди уходят от вас.
Таким образом, состояние используется для того, чтобы компонент мог отслеживать информацию между любыми визуализациями, которые он делает. Когда вы устанавливаете setState, он обновляет объект состояния, а затем повторно отображает компонент. Это очень круто, потому что это означает, что React заботится о тяжелой работе и работает невероятно быстро.
В качестве небольшого примера состояния приведен фрагмент из строки поиска (стоит проверить этот курс, если вы хотите узнать больше о React)
РЕЗЮМЕ
Реквизит и Государство делают подобные вещи, но используются по-разному. Большинство ваших компонентов, вероятно, будут без сохранения состояния.
Реквизиты используются для передачи данных от родителя к потомку или самим компонентом. Они неизменны и, следовательно, не будут изменены.
Состояние используется для изменяемых данных или данных, которые будут меняться. Это особенно полезно для пользовательского ввода. Вспомните, например, панель поиска. Пользователь будет вводить данные, и это будет обновлять то, что они видят.
источник
Короче говоря.
источник
состояние - это специальное изменяемое свойство, которое содержит данные компонента. имеет значение по умолчанию, когда компонент монтируется.
реквизит - это специальное свойство, которое является неизменным по своей природе и используется в случае передачи по значению от родителя к ребенку. реквизиты - это просто канал связи между Компонентами, всегда перемещающийся сверху (родитель) в нижний (дочерний элемент).
Ниже приведен полный пример объединения состояния и реквизита: -
источник
В общем, состояние одного компонента (родителя) является опорой для дочернего компонента.
Реквизит, как правило, неизменяем.
В приведенном выше коде у нас есть родительский класс (Parent) с именем в качестве состояния, которое передается дочернему компоненту (дочернему классу) в качестве реквизита, а дочерний компонент отображает его с помощью {this.props.name}
источник
У вас есть данные, которые вводятся пользователями где-то в приложении.
компонент, в который вводятся данные, должен иметь эти данные в своем состоянии, потому что он должен манипулировать и изменять их во время ввода данных
где-нибудь еще в приложении данные должны передаваться как реквизиты для всех других компонентов
Так что да, реквизиты меняются, но они меняются в «источнике» и затем просто текут оттуда. Таким образом, реквизиты являются неизменными в контексте компонента, получающего их .
Например, экран справочных данных, на котором пользователи редактируют список поставщиков, будет управлять этим в состоянии, что приведет к тому, что обновленные данные будут сохранены в ReferenceDataState, который может быть на один уровень ниже AppState, а затем этот список поставщиков будет передан как подпорка. ко всем компонентам, которые были необходимы для его использования.
источник
В React состояния хранят данные, а также реквизиты. Его отличие от последнего заключается в том, что хранимые данные могут быть изменены различными изменениями. Это не более чем объекты, написанные на простом JavaScript, поэтому они могут содержать данные или коды, представляющие информацию, которую вы хотите смоделировать. Если вам нужны более подробные сведения, рекомендуется просмотреть эти публикации. Использование состояния в действии и использование реквизита в действии.
источник
источник
Некоторые различия между «состоянием» и «реквизитом» в реакции.
Реагирует управления и визуализации DOM на основе состояния. Существует два типа состояний компонентов: props - это состояние, которое передается между компонентами, а состояние - внутреннее состояние компонентов. Реквизит используется для передачи данных из родительского компонента в дочерний компонент. Компоненты также имеют свое собственное состояние внутри: состояние, которое может быть изменено только внутри компонента.
Обычно состояние определенного компонента может быть реквизитом дочернего компонента, реквизиты будут переданы дочерним элементам, что указано в методе рендеринга родительского компонента.
источник
Реквизит
реквизиты используют для передачи данных в дочерний компонент
реквизиты изменяют значение вне компонента (дочерний компонент)
государственный
использование состояния внутри компонента класса
состояние изменить значение внутри компонента
Если вы отображаете страницу, вы вызываете setState для обновления DOM (обновить значение страницы)
Государство играет важную роль в реагировании
источник
В ответ на первоначальный вопрос о том, что реквизиты являются неизменяемыми, они называются неизменяемыми в отношении дочернего компонента, но могут быть изменены в родительском элементе.
источник
Реактивные компоненты используют состояние для ЧТЕНИЯ / ЗАПИСИ внутренних переменных, которые могут быть изменены / изменены, например:
React props - это специальный объект, который позволяет программисту получать переменные и методы из родительского компонента в дочерний компонент.
Это что-то вроде окон и дверей дома. Реквизиты также неизменны, дочерний компонент не может их менять / обновлять.
Есть несколько методов, которые помогают прослушивать изменения реквизитов родительским компонентом.
источник
Это моя текущая точка зрения относительно объяснения состояния и реквизита.
Состояние похоже на локальную переменную внутри вашего компонента. Вы можете манипулировать значением состояния с помощью установки состояния. Затем вы можете передать значение состояния вашему дочернему компоненту, например.
Реквизит - это значение, которое точно находится внутри вашего редукционного хранилища, фактически оно исходит из состояния, которое исходит от редуктора. Ваш компонент должен быть подключен к redux, чтобы получить значение от реквизита. Вы также можете передать значение реквизита вашему дочернему компоненту.
источник
Простое объяснение: STATE - это локальное состояние компонента, например color = "blue" или animation = true и т. Д. Используйте this.setState, чтобы изменить состояние компонента. PROPS - это то, как компоненты общаются друг с другом (отправляют данные от родителя к потомку) и делают компоненты повторно используемыми.
источник
State - ваши данные, они изменчивы, вы можете делать с ними все, что угодно, props - это данные только для чтения, обычно, когда вы передаете props, вы уже работаете с вашими данными и вам нужен дочерний компонент для их рендеринга или если ваш props является функция, которую вы вызываете, чтобы выполнить задачу
источник
Государство - источник истины, где живут ваши данные. Можно сказать, что государство проявляется через реквизит.
Обеспечение поддержки компонентов - это то, что обеспечивает синхронизацию вашего пользовательского интерфейса с вашими данными. Компонент - это просто функция, которая возвращает разметку.
При одинаковых реквизитах (данные для отображения) всегда будет создаваться одинаковая разметка .
Таким образом, реквизит похож на конвейеры, которые переносят данные от источника к функциональным компонентам.
источник
Реквизиты: представляют данные «только для чтения», которые являются неизменными и ссылаются на атрибуты родительского компонента.
Состояние: представляет изменяемые данные, которые в конечном итоге влияют на то, что отображается на странице и управляется внутренне самим компонентом, и изменяются сверхурочно, обычно из-за пользовательского ввода.
источник
Основное отличие состоит в том, что состояние является частным для компонента и может быть изменено внутри этого компонента только тогда, когда реквизиты являются просто статическим значением и ключом для дочернего компонента, который передается через родительский компонент и не может быть изменен внутри дочернего компонента.
источник