に反応:パス状態アップデータはclickHandlerでは、私のようなアプリを反応させるの持つ
Main.js-
import React, { Component } from 'react';
import _ from 'underscore';
import ApplicationsButtons from '../components/ApplicationsButtons';
let applications_url = 'http://127.0.0.1:8889/api/applications'
export default class Main extends Component {
constructor(props) {
super(props);
this.state = {applications: [], selected_app: 1};
this.updateSelectedApp = this.updateSelectedApp.bind(this);
}
componentDidMount() {
let self = this;
$.ajax({
url: applications_url,
method: 'GET',
success: function(data) {
console.log(data);
let objects = data.objects;
let apps = objects.map(function(object) {
return {name: object.name, id: object.id};
});
console.log(apps);
self.setState({applications: apps});
}
});
}
updateSelectedApp(id) {
this.setState({selected_app: id});
}
render() {
return (
<div>
{this.state.selected_app}
<ApplicationsButtons apps={this.state.applications} />
</div>
);
}
}
をApplicationsButtons.js-
import React, { Component } from 'react';
export default class ApplicationsButtons extends Component {
render() {
var buttons = null;
let apps = this.props.apps;
let clickHandler = this.props.clickHandler;
if (apps.length > 0) {
buttons = apps.map(function(app) {
return (<button key={app.id}>{app.name} - {app.id}</button>);
// return (<button onClick={clickHandler.apply(null, app.id)} key={app.id}>{app.name} - {app.id}</button>);
});
}
return (
<div>
{buttons}
</div>
);
}
}
私はへのonClickを渡したいです現在選択されているアプリを変更するボタン。どうにかして、私はReact(「setStateはちょうど20000回実行しました」)で最初の無限ループを取得しました。どうやら、クリックでイベントハンドラを呼び出そうとしたとき、私はそれを呼び出すようにと言った。
クリックされたボタンのid
に基づいて、Main
コンポーネントのonClick関数をstate.selected_app
に変更する必要があります。
たぶん関係ありませんが、このラインは副作用があります: 'this.setState({selected_app:ID});'。 'this.setState({... this.state、selected_app:id}); 'である必要があります。' 'アプリケーション'配列は削除されません。 – wesley6j
あなたの状態の他の部分を今は無視していると思っていました。最も最近の反応を使っています。v15 – codyc4321
@ codyc4321そうです、 'setState'は[' Object.assign'](https://developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)を使って、 'setState'行がうまくいくようにします。 – glhrmv