0
私は、テーブル行コンポーネントの配列をレンダリングするCamperListというReactコンポーネントを持っています。 2つのテーブルヘッドタグには、on.state.toggleを切り替えてテーブルを更新するはずのonClickイベントがあります。 All Time Pointsタグをクリックするとテーブルが更新されますが、過去30日間のタグをクリックすると更新されません。ペンにReactコンポーネントはonClickイベント後に再レンダリングされません
var CamperList = React.createClass({
getInitialState: function() {
return {
recent: [],
toggle: true
};
},
componentDidMount: function() {
$.get('http://fcctop100.herokuapp.com/api/fccusers/top/recent', function(data) {
this.setState({
recent: data
});
}.bind(this));
},
recent: function() {
this.setState({toggle: true});
},
alltime: function() {
this.setState({toggle: false});
},
render: function() {
var camperNodes;
if (this.state.toggle) {
camperNodes = this.state.recent.map(function(camper, index) {
return (
<Camper index={index + 1} username={camper.username} recent={camper.recent} alltime={camper.alltime} />
);
});
} else {
var alltime = this.state.recent;
alltime = alltime.sort(function(a,b) {
return b.alltime - a.alltime;
})
camperNodes = alltime.map(function(camper, index) {
return (
<Camper index={index + 1} username={camper.username} recent={camper.recent} alltime={camper.alltime} />
);
});
}
return (
<table className="table">
<thead className="blue">
<tr>
<th>#</th>
<th>Camper Name</th>
<th onClick={this.recent}>Points in past 30 days</th>
<th onClick={this.alltime}>All time points</th>
</tr>
</thead>
<tbody>
{camperNodes}
</tbody>
</table>
);
}
});
リンク:ここではコードですhttp://codepen.io/ZacharyKearns/pen/dMvGNG/
何が起こると思われますか?私はかなりクリックイベントハンドラがうまく動作するが、あなたのレンダリングロジックが間違っている(何とか)確信しています。残念ながら、あなたが達成しようとしていることを教えてくれないと、私たちは本当にお手伝いできません。私はあなたがデータを異なる方法でソートすると仮定しますが、あなたはどのように説明していません。これまでは、常にalltimeでデータをソートするだけです。 –
申し訳ありませんが、 'this.recent'が発生し、' toggle'を 'true'に設定すると、コンポーネントは最近のポイントでソートされたリストでレンダリングされます。 – Zach
しかし最近のポイントでソートすることはありません。 –