我想執行時,我的第一條路線呈現一些初始數據加載(例如,我要加載的新聞文章的列表)初始數據加載ReactJS
我做了一個叫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>
)
}
}
現在我的問題是,這不是針對磁通原理?不應該將數據調用爲Action,然後將其數據存儲在NewsStore等商店中?
如果一個動作是這樣的:
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;
在reactjs的Chat-app example他們提供了一個API調用的例子。然而,這個API調用是在應用程序啓動時調用的(在app.js中),這在我的場景中不適用,因爲我想使用路由。我會在路由器中加載數據嗎? (我正在使用反應路由器)
任何關於此問題的反饋或對此代碼的改進都非常值得歡迎。
這確實是一個很好的方法。不過,我想知道他們將如何將來自服務器的初始數據填入該商店。我查看了包含API調用的聊天應用程序,但是在這裏他們只是加載主要app.js中的數據,如果您有多個頁面,這些數據是沒有任何用處的https://github.com/facebook/flux/blob/ac1e4970c2a85d5030b65696461c271ba981a2a6 /examples/flux-chat/js/app.js#L23。 –
更新我的原始文章與進一步的細節(對廣泛的評論意見) –
@MaximGeerinck,謝謝,編輯我的答案。 –