【发布时间】:2016-09-03 00:17:58
【问题描述】:
我正在使用 React 制作一个应用程序,它从下拉菜单中获取用户输入,根据输入值进行 api 调用并显示结果。组件的结构是这样的。
Search
Input
Result
所以,Search 是 Input 和 Result 组件的父级。我想将值从Input 传递到调用发生的Search。然后将调用结果传递给Result(令人惊讶)。
我可以在Search 中为 api 调用硬编码值,结果显示正常。
但我无法弄清楚如何将输入字段的值从Input 传递到Search。我想我应该从Search 访问子(输入)道具,但我不知道如何设置它们,因为你不打算让组件设置它自己的道具。
我知道这是错误的,但我目前的情况是:
let Input = React.createClass ({
componentDidMount(){
this.props.genre = this.refs.genre.value;
// or this.state.genre = this.refs.genre ?
},
render() {
return <div>
<select ref="genre">
<option value="28">Action</option>
<option value="12">Adventure</option>
<option value="16">Animation</option>
<option value="35">Comedy</option>
<option value="37">Western</option>
</select>
<select>
<option ref="rating" type="text" placeholder="Rating"/>
</select>
<select>
<option ref="type" type="text" placeholder="Type"/>
</select>
<input type="submit" value="Submit"/>
</div>
}
});
export default Input;
和Search
let Search = React.createClass ({
getInitialState(){
return {
movies: ['Men In Black']
};
},
componentDidMount(){
let genre = this.props.genre || '';
let url = `http://theapi.org/3/discover/movie?${key}&with_genres=${genre}`;
Request.get(url).then((response) => {
console.log('response.body.results', response.body.results)
this.setState({
movies: response.body.results.map(function(movie){
return movie.title
})
});
});
},
render(){
console.log(this.state.movies)
return (
<div>
<Input/>
<ul>
{this.state.movies.map( function(movie){
return <Results key={movie.id} data={movie}/>;
})}
</ul>
</div>
);
}
});
export default Search;
我希望你能看到我在这里尝试做的事情。感觉并不难,但是我对 React 的 props 和 state 的掌握是基本的,即使在阅读了文档之后我也需要一些解释。
我想我的问题是,我是否应该将数据分配给孩子的道具或状态,以及如何从父母那里访问它?
【问题讨论】:
标签: javascript reactjs input parent-child