PropType для объекта, где ключи идентификаторы - PullRequest
1 голос
/ 08 января 2020

Я реорганизую свои редукционные хранилища, чтобы они стали объектами, где ключи - это идентификаторы, а не массивы. Пример:

Старый:

const orders = [
  { id: a, user: 1, items: ['apple','orange'] },
];

Новый:

const orders = {
  a: { user: 1, items: ['apple','orange'] },
};

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

order: PropTypes.arrayOf({
  PropTypes.shape({
    id: PropTypes.string.isRequired,
    user: PropTypes.number.isRequired,
    items: PropTypes.arrayOf(PropTypes.string).isRequired,
  }).isRequired,
}).isRequired,

Как бы я изменил свои PropTypes, чтобы соответствовать новой структуре?

Ответы [ 2 ]

1 голос
/ 08 января 2020

Из документов проп-типов

// An object with property values of a certain type
  optionalObjectOf: PropTypes.objectOf(PropTypes.number),

, поэтому это должно работать

orders: PropTypes.objectOf(
  PropTypes.shape({
    user: PropTypes.number.isRequired,
    items: PropTypes.arrayOf(PropTypes.string).isRequired,
  }).isRequired,
).isRequired,
1 голос
/ 08 января 2020

См. здесь

MyComponent.propTypes = {
  order: function(props, propName, componentName) {
    if (typeof props[propName] !== 'string') { // check if its ID
      return new Error(
        'Invalid prop `' + propName + '` supplied to' +
        ' `' + componentName + '`. Validation failed.'
      );
    }
    // add more checks for order.user, order.items, etc.
  }
}

Или вы можете использовать другие проверки, такие как: длина строки, mon goose objectId, et c.

...