ReactJS 从父组件的 onClick 方法更新对子组件的 ajax 调用
ReactJS Update ajax call to child component from onClick method from parent
>我有一个从一个json文件传递的数据数组。
当我单击列表项时,它会触发一个handleClick
方法,该方法将获取新 url 并将其设置为提供的状态。然后将该状态传递给使用该链接进行 ajax 调用的子组件。
问题是 ajax 调用仅在组件挂载时加载一次,并且无论我单击它多少次,之后都不会再进行调用。
如何让子组件在每次单击不同项目时加载新 URL?
父组件:
getInitialState: function() {
return {
gameUrl: ''
};
},
handleClick: function() {
this.setState({
gameUrl: gameUrl
});
},
render: function() {
var gameList = this.props.data.map(function(game) {
var homeTeamName = game.home_team_name;
var awayTeamName = game.away_team_name;
var gameUrl = game.game_directory+'/anotherFile.json';
console.log(homeTeamName+' vs '+awayTeamName+':'+ gameUrl);
var click = this.handleClick;
return (
<li key={game.location} className="list-group-item" onClick={click}>
{homeTeamName}
</li>
);
}, bind);
return (
<div>
<ul>
{gameList}
</ul>
<GameDetail url={this.state.gameUrl}/>
</div>
);
子组件:
componentDidMount: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({
data: data.data
});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
实现componentWillReceiveProps
方法。当道具已更改并且这不是初始渲染时,将调用它。然后根据现有和即将推出的道具更新状态。
componentWillReceiveProps: function(nextProps) {
this.setState({
// set something
});
}
感谢@WitVault设法做到了,这里是修订的部分:
我没有使用 componentDidMount,而是在子组件中将其更改为 componentWillReceiveProps。确保您通过的道具在子组件和父组件中相同。(即在子组件中 prop 是url
的,在父组件中,您将其传递给同一个 prop <GameDetail url={this.state.gameUrl}/>
然后,您可以通过nextProps.url
在componentWillReceiveProps
方法中访问它
componentWillReceiveProps: function(nextProps) {
// Access the url prop
var newUrl = nextProps.url;
$.ajax({
url: newUrl,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({
data: data.data
});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
相关文章:
- 从 HTML 组件调用 Javascript
- 反应组件调用了两次(AJAX调用异步)
- Vue.js 从另一个组件调用方法
- 从反应组件调用外部Javascript函数
- 如何在React Native中使用Navigator对正在转换为的组件调用方法
- 如何包含多个组件,然后可能从一个组件调用另一个组件
- 当子组件有嵌套的多个父组件时,从子组件调用超父函数
- 在reactjs中,从父组件调用并传递参数给子组件的函数
- React:从非所有者父组件调用函数
- 从Ember 2.0组件调用控制器动作
- 从另一个组件调用React VideoJS组件的方法
- 不能使用React从子组件调用父组件中的函数
- 如果不在主代码流中,ActiveX组件调用的回调函数不会触发
- 如何从不同的组件调用函数
- JavaScript,只在需要时才加载组件/调用方法
- Angular2从另一个组件调用函数
- Knockoutjs:从子组件调用父组件的函数
- 如何从子组件调用父组件中的方法
- 为什么用jQuery组件调用函数会重新加载xhtml页面
- 如何在 React 中从另一个组件调用组件的方法