React嵌套自定义propType

时间:2017-02-24 19:28:22

标签: reactjs react-proptypes

我有自定义Todo propType:

    export const TodoPropType = PropTypes.shape({
     title: PropTypes.string.isRequired,
     description: PropTypes.string
   })

我有这样的Todo收藏

{
 "Kfd455gdf4gdf" : { // key as uid
    title: "blabla",
    description: "blobloblo"
  },
  "Kf65sd465fsd" : {
     title: "blabla2",
     description: "blobloblo2"
  }
}

我想做一个自定义propType来验证集合并重用我的Todo propType

 export const TodosPropType = function(props, propName, componentName) {
  const todos = props[propName]

 // ... valide that an object..

  Object.keys(todos).map((qid) => {

    // valide that the qid is a string

    // reuse my TodoPropType 
  })
}

但不推荐使用PropType调用PropType。我收到了警告:

  

警告:您正在为todos上的TodoComponement道具手动调用React.PropTypes验证函数。这已被弃用,并且在下一个主要版本的制作中不起作用....

你是如何处理的?

1 个答案:

答案 0 :(得分:0)

不幸的是,在弃用时,您需要使用typeof stringToCheck === 'string'并手动检查props.title是否存在。如果缺少其中任何一项,您将使用new Error('error goes here')

手动返回错误

我们的应用程序中有类似的东西,从不需要进行自定义验证,为什么你不能做这样的事情。

component.propTypes = {
  todos: PropTypes.objectOf(TodoPropType)   
}

这将告诉组件检查todos是否是一个数组,如果是,则数组的内容应该是给定的形状,如果有任何形状不匹配,那么它将引发错误。