#reactjs
Вопрос:
Я видел следующий код:
class Welcome extends React.Component {
constructor(props) {
super(props);
this.state = {
name: ''
}
}
set name(newValue: string) {
this.setState({ name: newValue });
}
get name(): string {
return this.state.name
}
}
Функция сеттера озадачивает меня. Может ли кто-нибудь сказать мне, когда вызывается функция setter? Будет ли он вызван this.setState({ name: ...
? Если да, то будет ли она бесконечной?
Аналогично для функции getter. Будет ли это бесконечный призыв?
Комментарии:
1. Вы пробовали это сделать?
2. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… Это кажется чем-то легким для проверки. Я никогда не видел, чтобы это использовалось в компоненте класса React, поэтому я подозреваю, что это очень нерегулярно, т. Е. Вам нужно будет сделать что-то подобное
Welcome.name = 'John Smith'
, и это вообще не шаблон реакции. Я бы посоветовал не использовать его в компоненте React.3. Мой вопрос касается сосуществования функции установки и
setState
(и функции получения иthis.state...
).4. ОК. У вас есть законный случай использования, когда вы даже попытаетесь сделать что-то подобное? Это, вероятно, не будет работать так, как вы думаете, поскольку у вас очень хорошо не будет ссылки на какой-либо экземпляр
Welcome
компонента React, который выполняет рендеринг React. Т. Е. В React мы не вызываем компоненты, а их конструкторы сами реагируют.5. Я вижу этот код в проекте, который отлично работает. Поэтому я пытаюсь понять, как React выполняет его (и решает конфликт).
Ответ №1:
Может ли кто-нибудь сказать мне, когда вызывается функция setter?
Это вызывается при попытке установить значение в this.name. Это функция javascript и не связана с реакцией.
React игнорирует все изменения состояния, за исключением случаев, когда это делается через setState
. Изменение имени с помощью this.name = 'newName'
обычно не является допустимым методом изменения состояния. Все изменения состояния ДОЛЖНЫ будут происходить через setState
. В этом коде пользовательский метод настройки определен таким образом, что this.name = 'newName'
вызывает this.setState
.
В этом случае нет никакого конфликта. Вызов метода setter во время назначения является функцией javascript, React не играет в этом никакой роли. Метод setter изменяет состояние, с помощью setState
которого затем уведомляет react об изменении.
Функция getter вызывается каждый раз, когда вы пытаетесь получить доступ this.name. Так как функция getter возвращает this.state.name, это как-если бы this.name расширяется до this.state.name.
Комментарии:
1. Спасибо. Не могли бы вы подробнее рассказать о функции получения? Когда вызывается функция получения?