#reactjs #rendering
#reactjs #рендеринг
Вопрос:
Есть ли способы реализовать эту идею:
Я хочу выполнить некоторую проверку перед рендерингом. Если проверка верна, чем рендеринг. Но если проверка ложная, то сначала мне нужно сделать setState
, и только после рендеринга.
Спасибо.
Комментарии:
1. может быть, внутри
componentDidMount() {}
?2.
render() {}
это не место для setState, вы должны обрабатывать свое состояние в методах жизненного цикла компонента : facebook.github.io/react/docs/react-component.html3. Вот почему я задал этот вопрос. Мой crome выдает мне ошибку об использовании
setState
при рендеринге.
Ответ №1:
Я думаю, componentWillMount()
это буквально то, что вам нужно, но помещение этого в constructor()
может быть лучшим местом для этого.
class MyComponent extends React.Component {
constructor(props) {
super(props);
if (theCheck() === false) {
this.state = {
// ...
}
}
}
}
Комментарии:
1. Что такое super? И почему мы используем просто state , а не setState ?
2.
super()
вызывает исходную функцию конструктора из класса, который вы расширили. В этом случае это вызвало бы конструктор изReact.Component
.setState()
это способ сообщить React, что ему необходимо повторно рендерить компонент, поскольку его состояние изменилось. Если бы вы просто обновилиthis.state
, это не обнаружило бы никакой разницы. Использованиеthis.state
в конструкторе допустимо, поскольку компонент еще не был рендерен.
Ответ №2:
Попробуйте сначала отрисовку, затем выполните проверку и измените состояние, когда оно уже отрисовано с помощью componentDidMount()
. Не волнуйтесь, это будет так быстро, что ваши глаза не заметят, как это произойдет. Код будет выглядеть следующим образом:
class MyApp extends React.Component {
componentDidMount() {
if (CHECK HERE) {
this.setState({state : stateValue})
}
}
}