访问子组件是指从父组件内部访问子组件
Accessing child component refs from within a parent component
我正在创建一个简单的React应用程序,它基于搜索从OMDb API加载电影数据-到目前为止,一切顺利。
然而,我重构了应用程序,并在父容器组件中添加了数据获取逻辑。现在我有麻烦通过refs
从容器组件访问搜索字段的值。我的组件层次结构是这样的(每个组件在自己的文件中):
例子 state
和props
似乎很好,正在正确地通过。这是主组件的JS——我使用axios从API获取数据:
class MovieSearchContainer extends Component {
constructor(props) {
super(props);
this.state = {
Search: []
};
this._performSearch = this._performSearch.bind(this);
}
_performSearch() {
var _this = this;
let query = I WANT TO ACCESS THE SEARCH FIELD VALUE HERE, maybe?;
this.serverRequest =
axios
.get(`http://www.omdbapi.com/?s=${query}&r=json`)
.then(function(result) {
_this.setState({
Search: result.data.Search
});
})
.catch((error) => {
console.log('Error fetching and parsing data', error);
});
}
render() {
return(
<Application query={this.state.Search}
onSearch={this._performSearch} />
);
}
}
ReactDOM.render(<MovieSearchContainer />, document.getElementById('app'));
然后,进一步嵌套,我有一个<SearchForm />
组件与以下JS:
class SearchForm extends Component {
constructor() {
super();
this.state={
searchText: ''
};
}
_onSearchChange(e) {
const searchText = e.target.value;
this.setState({ searchText: searchText });
}
_handleSubmit(e) {
if (e) e.preventDefault();
this.props.onSearch(this.state.Search);
}
render() {
return (
<form className="search-form" onSubmit={this._handleSubmit.bind(this)} >
<label className="is-hidden" for="search">...</label>
<input type="search"
onChange={this._onSearchChange.bind(this)}
name="search"
ref="query"
placeholder="Search a Title..." />
<button type="submit" id="submit" className="search-button">...</button>
</form>
);
}
}
最大的问题是:我如何从<MovieSearchContainer />
内访问<SearchForm />
内input
的ref
(或值),以便我可以将该值传递给API调用?
// MovieSearchContainer
_performSearch() {
var _this = this;
let query = I WANT TO ACCESS THE SEARCH FIELD VALUE HERE, maybe?;
this.serverRequest =
axios
.get(`http://www.omdbapi.com/?s=${query}&r=json`)
.then(function(result) {
_this.setState({
Search: result.data.Search
});
})
}
我应该把这个逻辑放在其他地方吗?
我试过ReactDOM.findDOMNode(this.refs.query).value
和其他一些方法,但没有运气。
请让我知道,如果你需要我提供更多的代码。:)
UPDATE:我将相同的ref
值传递给每个子组件,包括我试图瞄准的input
。例如:
// component hierarchy
<Application />
<Header onSearch={this._performSearch} ref="query" />
<SearchForm onSearch={this.props.onSearch} ref="query" />
<input ... ref="query" />
我在容器组件中调用this.refs.query.value
,它只针对渲染子组件的最外层元素。
ref
值,包括input
节点:
<Header onSearch={this._performSearch} ref="header" />
<SearchForm onSearch={this.props.onSearch} ref="searchform" />
<input ... ref="query" />
然后,在我的_performSearch()
方法中,我像这样定位input
值:
_performSearch() {
var query = this.refs.header.refs.searchform.refs.query.value;
this.serverRequest =
axios
.get(`http://www.omdbapi.com/?s=${query}&r=json`)
...
}
它工作得很好,但是看起来有点代码臭。有更简洁的建议吗?:)
相关文章:
- 从vuejs中的组件模板访问父方法
- 回流:让多个组件访问同一个Store
- 访问vue组件中的ID标记
- Angular 2-如何从ControlGroup访问子组件
- 如何从Vue.js中的子组件访问父方法
- 访问Vuejs组件内部的元素
- 访问要在 React Native Text 组件中显示的对象数组
- 如何从一个组件访问另一个组件的状态
- 对自定义组件中的本地访问引用进行反应
- 动态添加子组件值时,如何从父组件访问这些值
- 如何访问Vue.js中深度嵌套的子组件中的数据
- 每次加载页面时,火狐附加组件访问变量
- React.js:从独立组件访问整个应用程序状态
- Vue.js从子组件访问父/根数据
- 从另一个组件访问函数内的React组件
- ReactJS:从基本组件访问上下文
- 从深度嵌套的组件访问redux分派
- 从子组件访问父组件/属性
- 可以't从子组件访问状态
- 从react组件访问环境变量