У меня есть компонент React, который отправляет изменение состояния редукции в его функцию componentWillMount
. Причина в том, что когда компонент загружен, ему нужно получить id
от url (с питанием от react-router
) и вызвать действие, которое устанавливает состояние с данными id
.
Вот компонент:
class Editor extends React.Component {
componentWillMount() {
const { dispatch, params } = this.props
dispatch(editItem(params.id))
}
render() {
const item = this.props.item
console.log("Editing", item)
}
}
export default connect(state => ({item: state.item}))(Editor)
Здесь catch: render
получает вызов дважды. item
имеет значение undefined при первом вызове и действует на втором. В идеале его следует вызывать только один раз this.props.item
на самом деле существует (после того, как действие editItem
было отправлено и запущено).
В соответствии с React docs: "Если вы вызываете setState
внутри этого метода, render()
будет видеть обновленное состояние и будет выполняться только один раз, несмотря на то, что изменение состояния".
В redux, dispatch
является эквивалентом вызова setState
, так как это приводит к изменению состояния. Тем не менее, я что-то угадываю, так как работа connect
по-прежнему вызывает вызов render
дважды.
Есть ли способ обойти это, помимо добавления строки типа if (!item) return;
?