引用在表单容器中为空
Refs are empty in a form container
我想做的是有一个Form react组件,它有几个方法来检查里面的所有输入元素是否有效。
我尝试了以下方法:
var FormContainer = React.createClass({
getDefaultProps: function() {
return {
elements: []
};
},
getInitialState: function() {
return {
errors: {}
};
},
className: function() {
return 'form-container';
},
isValid: function() {
var valid = true,
self = this;
this.props.elements.forEach(function(ref){
if (!self.refs[ref].isValid()){
valid = false;
}
});
return valid;
},
render: function() {
var self = this;
return (
<form className={self.className()}>
{self.props.children}
<span>Things be valid: </span> <span>{self.isValid()}</span>
</form>
);
}
});
它也有一个输入类型:
var Input = React.createClass({
getDefaultProps: function() {
return {
type: 'text'
};
},
getInitialState: function() {
return {
};
},
className: function() {
return 'form-input';
},
isValid: function() {
return false;
},
render: function() {
var self = this;
return (
<input type={self.props.type} className={self.className()} />
);
}
});
然后这就是我将如何实现它:
<Form elements={["date"]}>
<Input ref="date" type="date"></Input>
</Form>
神奇的事情发生在FormContainer isValid
方法中。我想做的是,对于添加到elements
数组中的每个输入名称,都能够获得对它的引用,并调用它自己的isValid
方法。
然而,当我尝试在这里调用self.refs if (!self.refs[ref].isValid())
时,我发现它是空的。我是React的新手,所以我不太确定我是否理解refs,但我认为我的<Form>
中任何有ref的Children都可以通过<Form>
本身访问。我该如何解决这个问题或采取更好的方法?重点是收集所有子元素,并在Form
级别的一个位置检查它们的有效性。
您的代码工作。您的问题是当isValid()
被称为时
<span>Things be valid: </span> <span>{self.isValid()}</span>
React还没有完成对结构的解析,因此this.refs
将是一个空对象,这就是为什么您应该避免在render()
函数中检查this.refs
。
文档对此非常清楚。
永远不要访问任何组件的渲染方法内部的refs,或者当任何组件的呈现方法在调用堆栈中的任何地方运行时
我会移动isValid()
功能,以便在提交或实际操作表单时使用。
JSFiddle演示
相关文章:
- 在表单提交按钮的点击事件中调用函数时发生引用错误
- 如何在加载表单时获得对Builder配置的Jenkins果冻脚本中表单元素的引用
- 使用ajax在coldfusion中引用表单值
- Dynamics CRM 2015:如何获得我创建的Web资源按钮,以引用我添加到表单中的Javascript库中的函数
- 如何在表单中引用跨度元素
- 表单验证返回引用错误
- CRM 2013-引用子记录的Javascript表单警报(onload事件)
- 使用javascript引用表单元素
- 引用在表单容器中为空
- 从模块内部引用特定的表单元素
- 页面重定向,在表单提交时传递引用 URL
- ExtJS MVC 表单引用
- 引用分配给 jQUERY 中变量的表单
- 如何在 Meteor 中添加与自动表单的关系或引用
- 在输入表单标记中使用 onclick 属性时出现 JavaScript 未捕获的引用错误
- AngularJS验证引用具有变量名称的表单对象
- 在iFrame(不同域)表单隐藏字段中抓取父级引用
- angular服务器端验证,如何从对象引用中找到表单元素
- Javascript引用表单,更改action url,然后http get
- Php联系人表单引用错误