我从React.js开始,我想做一个简单的表格,但是在文档中我找到了两种方法。
在第一种是使用参考文献:
var CommentForm = React.createClass({
handleSubmit: function(e) {
e.preventDefault();
var author = React.findDOMNode(this.refs.author).value.trim();
var text = React.findDOMNode(this.refs.text).value.trim();
if (!text || !author) {
return;
}
// TODO: send request to the server
React.findDOMNode(this.refs.author).value = '';
React.findDOMNode(this.refs.text).value = '';
return;
},
render: function() {
return (
<form className="commentForm" onSubmit={this.handleSubmit}>
<input type="text" placeholder="Your name" ref="author" />
<input type="text" placeholder="Say something..." ref="text" />
<input type="submit" value="Post" />
</form>
);
}
});
和第二个是使用状态内的阵营组分:
var TodoTextInput = React.createClass({
getInitialState: function() {
return {
value: this.props.value || ''
};
},
render: function() /*object*/ {
return (
<input className={this.props.className}
id={this.props.id}
placeholder={this.props.placeholder}
onBlur={this._save}
value={this.state.value}
/>
);
},
_save: function() {
this.props.onSave(this.state.value);
this.setState({value: ''
});
});
我看不出这两种选择的优缺点,如果有的话。谢谢。
我已经看到一些人引用以上答案作为“从不使用refs”的理由,我想发表自己的观点(以及与我交谈过的其他一些React开发人员)。
在谈论将其用于组件实例时,“不要使用引用”是正确的。意思是,您不应使用引用作为获取组件实例并在其上调用方法的方法。这是使用裁判的不正确方法,并且是裁判快速往南走的时候。
正确(且非常有用)的引用使用方法是当您使用它们从DOM中获得一些价值时。例如,如果您有一个将引用附加到该输入的输入字段,则稍后通过该引用获取值就很好了。如果没有这种方式,您就需要经过一个精心策划的过程,以使您的输入字段与您的本地州或流量存储区保持最新-这似乎是不必要的。
2019编辑:未来的朋友你好。除了我几年前提到的^之外,借助React Hooks,引用也是跟踪渲染之间的数据的好方法,并且不仅限于获取DOM节点。