Привязка реквизита к государственному ReactJS - PullRequest
0 голосов
/ 20 февраля 2019

Я прочитал в Интернете, что это плохая практика кодирования, чтобы выполнить следующее:

class Test extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      someItem = props.someItem
    };
  }
}

Однако, если бы у меня был такой сценарий:

class Test extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      someItem = this.props.someItem
    };
  }
}

Test.propTypes = {
  someItem: PropTypes.array
};

function mapStateToProps(state, ownProps) {
  [...]
  return {
    someItem: someItem
  };
}

export default withRouter(connect(mapStateToProps)(Test));

Будет либыть проблемой?Не могу найти в сети нигде, где бы не говорилось, что я не могу этого сделать.

Я пытаюсь убедиться, что каждый раз, когда я возвращаюсь к этому компоненту, компонент может получать данные из Redux Store.Я пытался использовать componentWillReceiveProps (), но пока он запускается только один раз, а componentDidMount и componentWillMount не принимает setState.

Cheers.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы не должны сохранять реквизиты в состоянии, если и до тех пор, пока вы не захотите изменить их на более поздний момент времени локально и обновить их после некоторых действий с поставщиком реквизита.Короче говоря, ваше состояние не должно быть напрямую получено из реквизита во все моменты времени в вашем коде.

Даже если вы используете redux mapStateToProps для предоставления реквизита для компонента, оно все равно, как и из родительского

class Test extends React.Component {
  render() {
      console.log(this.props.someItem);
  }
}

Test.propTypes = {
  someItem: PropTypes.array
};

function mapStateToProps(state, ownProps) {
  [...]
  return {
    someItem: someItem
  };
}

export default withRouter(connect(mapStateToProps)(Test));
...