Как использовать встроенные функции PropType внутри пользовательского валидатора? - PullRequest
0 голосов
/ 15 марта 2020

У меня был этот валидатор (array спецификации c shape) для свойства defaultValue:

defaultValue: PropTypes.arrayOf(PropTypes.shape({
        key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
        value: PropTypes.string.isRequired
    }))

, но теперь defaultValue также может иметь тип string. Поэтому я пытаюсь использовать собственный валидатор:

defaultValue: function (props, propName, componentName) {
  if (typeof props[propName] === "string"){

  } else if (props[propName] instanceof Array){
      //how to add old functionality here?
  } else {
      return new Error(
        `Invalid prop ${propName} supplied to ${componentName}. Validation failed`
      )
  }

}

Могу ли я использовать старый PropTypes.arrayOf(....) внутри собственного валидатора? Я хочу добавить старую валидацию в новую пользовательскую функцию валидатора. Если использование PropTypes невозможно, как этого добиться с помощью пользовательского кода?

1 Ответ

0 голосов
/ 15 марта 2020

если вы просто хотите сделать значение по умолчанию либо строкой, либо вашим пользовательским типом, вы можете использовать oneOfType со строкой и вашим типом, и он будет работать.

PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.arrayOf(PropTypes.shape({
                key: PropTypes.oneOfType([PropTypes.string, 
                                          PropTypes.number]).isRequired,
                value: PropTypes.string.isRequired}))
])
...