Повторное использование общей формы PropType с реквизитом требуется или не требуется в зависимости от компонента - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть общий proptype (в lib), который импортирует и использует несколько компонентов.

ListPropType = PropTypes.shape({
    name: PropTypes.string,
    creatorId: PropTypes.string.isRequired,
    ...
});

1) Для некоторых компонентов я хочу сделать имя обязательным, а для некоторых компонентов я нет.

2) Также для некоторых компонентов я хочу добавить дополнительные фигуры в форму.

Существует ли простой или распространенный способ обработки этих вариантов использования, который не предусматривает дублирование всего, кроме полей, которые отличаются?

1 Ответ

0 голосов
/ 19 сентября 2019

Никогда не нужно было этого делать, но я полагаю, вы могли бы написать фабричный метод для генерации фигуры, чтобы вы могли добавлять isRequired к полям на лету.

const getShape = (requiredFields, extraFields) => {
  const template = {
    name: PropTypes.string,
    creatorId: PropTypes.string.isRequired,
  };
  Object.keys(template).forEach(key => {
    if (requiredFields.includes(key)) {
      template[key] = template[key].isRequired;
    }
  });
  return PropTypes.shape({
    ...template,
    ...extraFields,
  });
}

// Create propType with 'name' required and extra date field
ListPropType = getShape(
  ['name'],
  { date: PropTypes.string }
);

Вы даже можете абстрагироваться от этого, взяв начальный шаблон в качестве аргумента функции getShape.

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