React JS ' proptype '验证器运行两次
React JS 'propTypes' validators running twice
下面的代码创建有序和无序列表。虽然其他部分的代码没有张贴在这里,因为不相关
问题:我通过在"导航"组件中调用它来传递一些属性给"列表"组件。我通过运行一些验证通过'List'的propTypes来验证'List'收到的项目。然而,我注意到验证运行了两次。我不知道为什么?
是因为代码内部发生了一些竞争条件吗?或者,这是React中的一个bug ?
var Navigation = React.createClass({
render: function() {
return (
<nav>
<List type="ol" items={this.props.items} />
</nav>
);
}
});
var List = React.createClass({
propTypes: {
type: React.PropTypes.string.isRequired,
items: React.PropTypes.array.isRequired,
customProp: function(props, propName, componentName) {
if (props["type"] !== "ol" && props["type"] !== "ul") {
return new Error("Incorrect list type provided");
}
}
},
getInitialState: function() {
return {
showList: true,
listType: this.props.type
}
},
render: function() {
return (
<this.state.listType>
{this.props.items.map(function(item) {
return <ListItem data={item} />
})}
</this.state.listType>
)
}
});
React.render(<Navigation items={items} />, document.body);
这是因为React在0.11中引入了描述符这个问题在v0.12中仍然存在。下面的链接详细介绍了这一点。
React Github issue on this
React v0.11 blog on propValidation
您的customProp引用并检查另一个prop: 'type'。如果你需要一个自定义函数,把它放在你想要应用该函数的道具之后。
你实际上只需要2个propTypes: type和items。您需要确保提供的类型为'ol'或'ul'。
要做到这一点,不需要第三个propType。
将propTypes代码更改为:
propTypes: {
type: React.PropTypes.oneOf(['ol', 'ul']),
items: React.PropTypes.array.isRequired
},
那么你不需要你的customProp。然后你的代码应该做你想做的。
相关文章:
- Meteor Router数据函数被调用两次
- 如何在datetimepicker中使用两个验证器
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- JavaScript/JQuery表单验证运行两次
- jQuery表单验证器:需要提交两次
- JavaScript 的双盲输入(两次验证)
- 如何防止jquery验证发出两次警报
- 两次验证之间的角度过滤器不起作用
- 如何一次用两个结果进行两个验证
- JavaScript表单验证问题-提交必须点击两次
- React JS ' proptype '验证器运行两次
- 多个文件上传验证-限制同一文件的两次选择
- jQuery验证提交表单两次
- Laravel电子邮件验证与域名两次
- 验证摘要消息弹出两次
- 淘汰-验证显示相同的错误信息两次
- jQuery验证:为什么提交按钮必须点击两次在我的Rails应用程序