Компонент React не обновляется при изменении состояния в редуксе - PullRequest
0 голосов
/ 10 сентября 2018

REDUX

return{...state,importGridData:importGridData)

Здесь importGridData назначает переменным состояния внутри начального состояния приращения

Визуализация компонентов

const {importGridData} = this.props
this.setState({importGrdData,importGridData)

Я получаю данные здесь вРеагировать на компонент с помощью реквизита. И я хочу назначить эти данные в моем компоненте сетки данных

<DataGrid data={this.state.importGrdData}

Я не могу дать setState внутри метода рендеринга, так как я могу обновить мои данные сетки данных?

здесь чего-нибудь не хватает?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Похоже, вы хотите обновить состояние компонента из состояния избыточности.

В этом случае, как упоминает Бходжендра, вы можете использовать метод componentDidUpdate, как показано ниже.

componentDidUpdate(prevProps, prevState) {
  const { importGridData } = this.props;

  if(prevProps.importGridData !== importGridData) {
    // update the state
    this.setState({ importGrdData: importGridData })
  }
}

Но вместо того, чтобы копировать избыточное состояние в локальное состояние, а затем связывать данные с DataGrid, я бы рекомендовал напрямую использовать состояние redux для привязки сетки в методе render, если у вас нет других зависимостей .

render() {
   const { importGridData } = this.props;
   return <DataGrid data={importGridData} />;
}
0 голосов
/ 10 сентября 2018

Я использую жизненный цикл componentWillReceiveProps для получения следующих реквизитов.

componentWillReceiveProps(nextProps){  
    this.setState({   
        importGrdData:    nextProps,  
    });
}

Код является примером. Надеюсь, он вам пригодится. Спасибо

0 голосов
/ 10 сентября 2018

Это должно быть двоеточие : не запятая ,:

this.setState({importGrdData:importGridData})

Ах, я вижу разницу в правописании (Grd и Grid):

Также вы можете просто написать: (потому что у вас одно имя)

this.setState({importGrdData})


Вы можете обновить состояние в хуке componentDidUpdate, чтобы после получения реквизита оно обновляло состояние:

componentDidUpdate(prevProps, prevState) {
  if(this.state.importGrdData !== prevState.importGrdData) {
    // update the state
  }
}

Чтобы узнать больше о componentDidUpdate, посмотрите документы .

Только в редких случаях вы можете использовать getDerivedStateFromProps .

...