私は今すぐ反応ルータを自分のアプリケーションに組み込み始めました。それは魅力的なものです。しかし、私には小さな問題が1つあります。ある時点で、別のページに変更するボタンをクリックする必要がありますが、アクションコール(サーバーに行き、データを表に表示させる)を行う必要があります。現時点では、アクションルーターの前に反応ルータのリンクが起動しているため、マップするデータがないため、この時点でアプリケーションが中断されます。React-router - リンクの発火が遅すぎる
私の質問は、ページが変更されたときに(アクションによって更新された)ストア内にデータが存在するように、これらのイベントが発生する順序を変更する方法です。
現在のコードブロック:
import React from 'react';
import { Link } from 'react-router';
import List from 'material-ui/lib/lists/list';
import ListItem from 'material-ui/lib/lists/list-item';
import ActionInfo from 'material-ui/lib/svg-icons/action/info';
import { getTable } from '../../actions/DALIActions';
import TokenStore from '../../stores/TokenStore';
import TableStore from '../../stores/TableStore';
const styles = {
root: {
paddingTop: 200,
width: '100%',
},
headerStyle: {
textAlign: 'center',
},
container: {
border: 'solid 1px #d9d9d9',
height: 500,
overflow: 'hidden',
},
};
class MainTablePage extends React.Component {
getTable(id) {
getTable(TokenStore.getToken(), id);
}
addTables() {
let tableArray = TableStore.getTables().objects;
console.log(tableArray);
let tableList = tableArray.map((el, i) => {
return (
<ListItem
key={i}
id={el.id}
primaryText={el.title}
leftIcon={<ActionInfo />}
containerElement={<Link to="/table" />}
linkButton={true}
onTouchTap={this.getTable.bind(this, el.id)}
/>
);
});
return tableList;
}
render() {
return (
<div>
<div style={styles.headerStyle}>
<h1>Here are the current tables available</h1>
</div>
<div style={styles.root}>
<div style={styles.container}>
<List>
{this.addTables()}
</List>
</div>
</div>
</div>
);
}
}
export default MainTablePage;
そうそう、おそらく問題を助けないように、私は材料-UIを使用しています!
すべてのヘルプは非常にお時間を
おかげ
APIコールを 'componentDidMount'に入れてから、データが返されると' setState'を実行して、ビューを再描画してみてください。ここをクリックしてください:https://facebook.github.io/react/tips/initial-ajax.html – lux
クリックした後にユーザーを待機させるか、ページを変更してAPIが終了してローダーを表示するまで待ちますかその間。 API呼び出しに時間がかかるため、ページを変更しないと、ユーザーはボタンを何度も繰り返し押します。 –