Я новичок в React (всего 1 онлайн-курс) и открываю для себя магию реквизита и состояния. Я понимаю, что реквизиты неизменны, а состояние изменчиво. Мне становится понятнее их использование, но есть один момент, который я хотел бы уточнить, который я не смог найти в Интернете.
Таким образом, реквизиты могут передаваться от родителя к дочернему, и когда они передаются, имя переменной, содержащей реквизит, может быть изменено. Когда состояние или его значения передаются дочерним компонентам, дочерним компонентам также передается механизм, позволяющий дочерним элементам изменять состояние на родительском уровне.
Я надеюсь, что это правильно, поскольку это то, что я понял о свойствах и состоянии.
Теперь у меня есть проект, в котором у меня есть «App.js», который является самым верхним родителем с «Home.js» в качестве его дочернего элемента. Я планирую использовать state
в обоих случаях. Но state
в App.js — это что-то вроде глобального состояния (и я не хочу использовать избыточность), а state
в Home.js — это состояние, которое приложение будет использовать для своего обычного использования.
Теперь они оба именуются в формате state = {}
(я использую компоненты на основе классов) и называются this.state
, но внутри своих собственных компонентов, что работает нормально.
Мой вопрос касается формата именования состояния как state
, является ли это обязательным или просто стандартом, которому должны следовать разработчики?
Я пытался изменить имя состояния, и, похоже, это сработало, но, возможно, я сделал что-то не так, поскольку я действительно не ожидал, что это сработает... поэтому я хотел подтвердить, можно ли изменить имя состояния. состояние в компоненте на что-то вроде globalState
или store
Любые советы будут оценены.
При написании компонентов класса вы можете обновить состояние только с помощью метода setState
, и он запишет состояние в свойство state
.
Хотя я предполагаю, что вы могли бы добавить в класс свойство-геттер globalState
, которое возвращает значение state
, это кажется бессмысленным.
Обратите внимание, что сохранение данных в других свойствах вместо использования setState
для записи в них не вызовет повторный рендеринг. Вы просто пишете в свойство объекта и не имеете дело ни с чем, что React считает состоянием.
При написании функциональных компонентов состояние обрабатывается с помощью хука useState
, а обработка сохранения данных состояния выполняется внутренними компонентами React. Затем значение состояния присваивается любой переменной, которой вы хотите его присвоить после чтения возвращенного массива состояний.
const [anyName, setAnyName] = useState(defaultValue);
const [anyOtherName, setAnyOtherName] = useState(otherDefaultValue);
Итак, чтобы подтвердить, переменная/объект, который содержит состояние, всегда должна называться state
... верно? .. Я бы не хотел добавлять свойство геттера globalState, как вы правильно упомянули, это было бы бессмысленно .. но я думал об именовании state
как globalState
при инициализации свойства .. и из вашего ответа я понимаю, что это не правильный поступок.. я прав?
Да, это правильно.
примечание: компоненты класса несколько устарели. если вы только начинаете реагировать, я рекомендую использовать функциональные компоненты везде. обратите внимание, что документация по реакции — это переписывается с функциональными компонентами и хуками по умолчанию. это все еще в бета-версии. или ознакомьтесь с полным неофициальным первые документы.