gpt4 book ai didi

javascript - 用组件 react refs

转载 作者:可可西里 更新时间:2023-11-01 01:20:53 24 4
gpt4 key购买 nike

我有一个 React 表单,它有一个用于呈现下拉列表的组件,因为选项来自 API。但是,我无法访问嵌入式组件的引用。我正在整理我的第一份表格,并试图了解解决此问题的最佳方法。

var ActivityForm = React.createClass({
handleSubmit: function(e) {
e.preventDefault();

var noteCategoryId = this.refs.note_category_id.getDOMNode().value.trim();
var content = this.refs.content.getDOMNode().value.trim();

if (!category || !content) {
return;
}

// this.props.onCommentSubmit({author: author, text: text});

this.refs.note_category_id.getDOMNode().value = '';
this.refs.content.getDOMNode().value = '';
return;
},
render: function() {
return (
<div className="new-activity">
<h3>New Activity</h3>
<form onSubmit={this.handleSubmit}>
<textarea ref='content' />
<br />

<label>Category</label>
<ActivityFormCategoryDropdown /> # THE REF IN THIS COMPONENT ISN'T ACCESSIBLE
<br />

<input type="submit" value="Add Activity" />
</form>
</div>
);
}
});

最佳答案

最好将 ref 视为 callback attribute并且不再依赖于 refs 对象。如果您确实使用了 refs 对象,请避免访问后代组件的 refs。您应该将 refs 视为私有(private)访问器,而不是组件 API 的一部分。仅将组件实例上公开的方法视为其公共(public) API。

对于这种情况,我建议从提交事件中获取表单并根据需要遍历其子表单元素。添加 name 属性,因为这是在标准表单提交中识别表单元素的方式,然后您根本不需要 refs:

var ActivityForm = React.createClass({
handleSubmit: function(e) {
e.preventDefault();
var form = e.target;

// Use the standard [`HTMLFormElement.elements`][1] collection
//
// [1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/elements
var content = form.elements['content'].value;

// do more things with other named form elements
},
render: function() {
return (
<div className="new-activity">
<h3>New Activity</h3>
<form onSubmit={this.handleSubmit}>
<textarea name='content' />
<br />

<label>Category</label>
<ActivityFormCategoryDropdown />
<br />

<input type="submit" value="Add Activity" />
</form>
</div>
);
}
});

2016 年 9 月 21 日更新:根据 ref String Attribute 中的指导修改建议以避免 refs 对象一起出现文档。

关于javascript - 用组件 react refs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com