Реагируйте propTypes для указанных c дочерних компонентов - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть компонент функции, подобный так:

const Foo = () => <div>Hello world</div>;

Теперь у меня есть другой компонент, который принимает дочерние элементы, но его следует ограничить только одним или несколькими компонентами Foo ( другие компоненты не разрешены).

const Bar = ({ children }) => <div>{children}</div>;

Как мне установить propTypes на Bar для достижения этой проверки?

Bar.propTypes = {
  children: PropTypes.oneOf([
    PropTypes.arrayOf(PropTypes.node),
    PropTypes.node,
  ]);
};

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

1 Ответ

3 голосов
/ 04 февраля 2020

Вы можете использовать PropTypes.shape

Bar.propTypes = {
  children: PropTypes.oneOfType([
    PropTypes.shape({
      type: PropTypes.oneOf([Foo]),
    }),
    PropTypes.arrayOf(
      PropTypes.shape({
        type: PropTypes.oneOf([Foo]),
      })
    ),
  ]).isRequired
};
...