私はレンダリングNews.jsと呼ばれるコンポーネントを作った(例えば、私は、ニュース記事のリストをロードしたいです)記事。私がFLUXモデルで経験している問題は、この初期データをロードする場所です。
私がデータをロードするサービスは、次のとおりです。 'superagent'からのインポート要求。
class NewsService {
fetchArticles(callback) {
request
.get('http://localhost/articles')
.accept('json')
.end(function(err, res){
console.log(err);
var result = JSON.parse(res.text);
callback(result);
})
}
}
export default new NewsService();
このサービスはどこかで呼び出す必要があります。 ReactJSのドキュメントによると、私はこのようなこの操作を実行します:
export default class News extends React.Component {
constructor() {
super();
this.state = {
_articles: []
}
}
componentDidMount() {
NewsService.fetchProjects(function(articles){
// load articles in the state
this.setState({_articles: _articles})
});
}
render() {
return (
<section>
<h1>Articles</h1>
<ul>
{this.state.articles.map((article) => {
<li>{article.title}</li>
})}
</ul>
</section>
)
}
}
今、私の質問があり、これはフラックス原則に反しありませんか?データをアクションとして呼び出して、そのデータをNewsStoreなどの店舗に保存するべきではありませんか?
アクションは、次のようにする必要があります:
彼らはAPI呼び出しの例を提供reactjsの Chat-app exampleでvar NewsActions = {
load: function() {
NewsService.fetchProjects(function(articles){
// store the articles in the NewsStore and dispatch afterwards
});
},
create: function(project) {
AppDispatcher.dispatch({
actionType: NewsConstants.ARTICLE_CREATE,
project: project
});
},
update: function(id, project) {
AppDispatcher.dispatch({
actionType: NewsConstants.ARTICLE_UPDATE,
id: id,
project: project
})
},
destroy: function() {
AppDispatcher.dispatch({
actionType: NewsConstants.ARTICLE_DESTROY,
id: id
})
}
};
export default NewsActions;
。しかし、このAPIコールはアプリケーションの起動時に(app.js内で)呼び出されます。これは私のシナリオには適用されません。私はルーティングを使いたいのです。ルータにデータをロードしますか? (私は反応ルータを使用しています)
このコードの改善や改善については、歓迎します。
これは実際には素晴らしい方法です。しかし、私は彼らがどのようにinititalデータをサーバーからそのストアに書き込むかを知りたいと思います。私は、API呼び出しを含むチャットアプリケーションをチェックしましたが、複数のページがある場合は、メインapp.jsにデータをロードします。https://github.com/facebook/flux/blob/ac1e4970c2a85d5030b65696461c271ba981a2a6 /examples/flux-chat/js/app.js#L23。 –
@MaximGeerinck、ありがとう、私の答えを編集しました –
@MaximGeerinck、私のオリジナルのポストをさらに詳細と(広範なコメントに申し訳ありません)更新しました。 –