reactjs – React PropTypes验证arrayOf所需元素无法正常工作

前端之家收集整理的这篇文章主要介绍了reactjs – React PropTypes验证arrayOf所需元素无法正常工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
空数组[]传递以下PropTypes定义,即使我们声明字符串元素是必需的.
{
    a: React.PropTypes.arrayOf(
        React.PropTypes.string.isrequired
    ).isrequired
}

相反,空对象{}不传递以下propTypes定义:

{
    a: React.PropTypes.shape({
        x: PropTypes.string.isrequired
    }).isrequired
}

数组验证似乎无法正常工作.有任何想法吗?

您可以使用自定义验证器.我不相信你可以在没有项目的情况下强制执行arrayOf中的string.isrequired.从arrayOf的自定义验证器如何工作来判断它似乎调用每个键上的回调.因此,如果值没有键,则不会调用任何验证器.

(注意,这没有经过测试)

a: function(props,propName,componentName) {
  var errorCount = 0
  var prop = props[propName]
  // ensure it is an array
  if (typeof prop !== 'array') {
    errorCount++
  }
  // ensure array has items
  else if (prop.length == 0) {
    errorCount++
  }
  // ensure all items are strings
  else {
    for (var i = 0; i < prop.length; i++) {
      if (typeof prop[i] !== 'string') errorCount++
    }
  }
  // throw error
  if (errorCount > 0) {
    return new Error(
      'Invalid prop `' + propName + '` supplied to' +
      ' `' + componentName + '`. Validation Failed.'
    );
  }

猜你在找的React相关文章