gpt4 book ai didi

javascript - 调用另一个组件在react.js中渲染

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:44 26 4
gpt4 key购买 nike

http://codepen.io/anon/pen/KNEzOX?editors=0010

我有组件 A 来获取并呈现列表。我有接受用户输入的组件 B。如何从组件 B 中触发组件 A?我想我的结构是错误的。

const Profiles = React.createClass({
getInitialState(){
return {profiles: []}
if(!this.props.username){
return false;
}
fetch('https://api.github.com/search/users?q=' + this.props.username)
.then(function(response) {
return response.json()
}).then(function(json) {
this.setState({profile: json.items})
})
},
render(){
return (
<ul>
{
this.state.profiles.map(profile =>
<li key={profile.id}>profile.name</li>
)
}
</ul>
)
}
})

const Input = React.createClass({
getInitialState(){
return {username:''}
},
handleInputChange(e){
this.setState({username:e.target.value})
},
handleSearch(){
if(!this.state.username){
alert('username cannot be empty');
return false;
}
//call profile component and pass username to it?
},
render() {
return(
<div>
<input type="text" placeholder="github username" onChange={this.handleInputChange} value={this.state.username} />
<button onClick={this.handleSearch}>Search</button>
<Profiles username={this.state.username} />
</div>
)
}
});

最佳答案

首先:

getInitialState(){
return {profiles: []}
if(!this.props.username){
return false;
}
fetch('https://api.github.com/search/users?q=' + this.props.username)

由于返回,Fetch 永远不会在这里执行。将返回放在最后。

其次,您需要的是在组件收到新的 props 时获取它。我要做的就是向要获取的类添加一个新方法,并从 getInitialStatecomponentWillReceiveProps 调用它。所以:

  getInitialState(){
if(!this.props.username){
return false;
}
this._fetchData();
return {profiles: []}
},
componentWillReceiveProps(){
this._fetchData();
},
_fetchData(){
fetch('https://api.github.com/search/users?q=' + this.props.username)
.then(function(response) {
return response.json()
}).then(function(json) {
this.setState({profile: json.items})
})
},

问题是该组件已经存在,因此不会调用 getInitialState 。它只需要 self 更新。

关于javascript - 调用另一个组件在react.js中渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41243685/

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