2016-09-15 3 views
0

После много споров с моими коллегами о значении исходного состояния для данных асинхронизации, полученных с помощью API, мы решили, что было бы более понятно, что исходные значения будут заданы как пустой массив/пустой объект вместо null.Начальное состояние магазина Redux - недействительный прокси

Но когда я реализовал его сегодня, я понял, что пустой объект будет вызывать предупреждение PropTypes, даже если prop не требуется, поскольку он не является нулевым.

Неправильно ли устанавливать начальное значение для пустого объекта внутри состояния? Или есть способ не получить предупреждение?

мое текущее начальное состояние выглядит следующим образом:

const user = (state = { 
     isRetrieving: false, 
     isUpdating: false, 
     hasRetrieved: false, 
     didInvalidate: false, 
     item: {}, 
    }, action) => { 
     switch (action.type) { 
     default: 
      return state; 
     } 
    }; 
+0

Вы хотите сказать, что не разрешили вам проверку? На что это похоже? – ZekeDroid

+0

Не могли бы вы добавить свои PropTypes к вопросам? –

ответ

0

если что-то требуется в вашем штате приложения, вы должны сделать его частью исходного состояния, начиная всегда с пустым объектом заставит вас добавить оборонительный код все над вашими компонентами (вы будете обрабатывать неопределенные свойства каждого компонента, если это не полезно для поддержки).

Чтобы сделать это проще, я бы подумал, что этот вопрос похож на «должен ли я сделать конструктор класса без аргументов?», Проблема аналогична, если объект всегда требует определенного аргумента, сделайте его аргументом конструктора, сделайте это часть исходного состояния, не поддерживают дополнительные состояния, которые не нужны, поскольку это имеет стоимость по сложности.

Итак, нет, не создавайте исходное состояние пустым объектом (ни пустым), поскольку это сделает ваши компоненты немного более сложными, хотя я не думаю, что это официально считается плохой практикой сокращения.

И наконец, остерегайтесь того, что состояние редукции не совпадает с компонентом реквизита, если что-то действительно является значением по умолчанию для компонента prop (а не для чего-то необходимого для состояния приложения), вы можете использовать Component.defaultProps, defaultProps является статическим членом компонента React со значениями, которые установлены по умолчанию для вашего Component.propTypes, или вы даже можете вернуть этот реквизит по умолчанию от функции, см. https://facebook.github.io/react/docs/reusable-components.html#default-prop-values

Смежные вопросы