2016-12-02 20 views
1

我有这样一个类:如何在React中验证Prop的类及其字段的类(嵌套对象)?

class ResponseState() { 
    constructor(data) { 
     this.data = data; 
    } 
} 

现在我可以确认的是,道具就是这种类型的:

Container.propTypes = { 
    myProp: PropTypes.instanceOf(ResponseState).isRequired, 
}; 

这工作得很好,但我怎么能确认的myProp.data类型以及?如果我使用PropTypes.shape,那么我无法检查myProp本身。

有一个类似的问题here,但它并不完全给出答案这个确切的问题。

回答

1

我很惊讶,没有看到任何组合形式为PropTypes

你可以使用一个自定义的验证:

Container.propTypes = { 
    myProp: function(props, propName, componentName) { 
     if (!propName in props) { 
     return new Error(propName + " is required"); 
     } 
     const value = props[propName]; 
     if (!(value instanceof ResponseState)) { 
     return new Error(propName + " must be an instance of ResponseState"); 
     } 
     if (/*...validate value.data here ...*/) { 
     return new Error(propName + " must have etc. etc."); 
     } 
    } 
}; 
+0

似乎颇重的重量,考虑到我必须这样做,在一些地方,而数据则是各种形状的容器不同类...但感谢答案似乎没有更好的办法。 –

+0

@IlyaChernomordik:是的。如果你仔细研究了React源代码,你可以在验证器中重复使用'PropTypes.instanceOf'和'shape',但是...仅供参考,碰到[this comment](https://github.com/facebook/react/issues/1836#issuecomment-68741246)在ReactJS问题上:*“正在逐步淘汰支持类似Flow的工具。”* –