Обязательны ли defaultProps при использовании Redux connect? - PullRequest
0 голосов
/ 20 февраля 2019

Допустим, у нас есть простой компонент React, связанный с Redux:

const MyComponent = ({ name }) => <p>{name}</p>

// PropTypes definition - we'll back to that in a moment...

const mapStateToProps = state => ({
  name: state.name,
});

export default connect(mapStateToProps)(MyComponent);

И вот вопрос - обязательно ли указывать defaultProps для MyComponent при подключении его к Reduxхранить?Как показано ниже:

MyComponent.propTypes = {
  name: PropTypes.string,
}

MyComponent.defaultProps = {
  name: 'hsz',
}

Или, может быть, мы в безопасности, и нет необходимости указывать defaultProps?

Ответы [ 3 ]

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

Не думаю, что вы должны указывать defaultProps.Реквизиты переносятся из mapStateToProps так, как вы устанавливаете свое «имя: имя.состояния».Если вы просто используете «состояние», вам нужно вызвать this.props.state.name.Я думаю, что вам нужно будет вызвать this.props.name, а не просто имя там.

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

defaultProps никогда не является обязательным.

Однако рекомендуется, чтобы компонент объявлял PropTypes, чтобы читатель знал реквизиты, необходимые или требуемые этим компонентом.

Длявсе реквизиты, определенные в PropTypes, указаны как , а не isRequired, тогда эти реквизиты должны быть определены в defaultProps в качестве значения по умолчанию.

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

Нет, использование React's PropTypes и defaultProps никогда обязательно.Однако, если есть вероятность, что реквизит может не существовать или быть undefined, то вам следует каким-то образом разобраться с этим случаем.Это можно сделать, определив значение defaultProps, используя значения по умолчанию для деструктуризации в render() или, по крайней мере, проверив, есть ли значимое значение для этого реквизита, прежде чем пытаться выполнить рендеринг на основе его значения.

ДляЕще несколько советов по этой теме, см. пост Дэйва Седдиа Остерегайтесь неопределенного состояния .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...