【发布时间】:2015-12-04 10:41:53
【问题描述】:
我想在我的第一条路线被渲染时执行一些初始数据加载(例如,我想加载新闻文章列表)
我制作了一个名为 News.js 的组件来呈现文章。我在使用 FLUX 模型时遇到的问题是在哪里加载这些初始数据。
我为加载数据所做的服务如下: 来自“超级代理”的导入请求;
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 中),这在我的场景中不适用,因为我想使用路由。我会在路由器中加载数据吗? (我正在使用 react-router)
非常欢迎有关此问题的任何反馈或此代码的改进。
【问题讨论】:
标签: javascript reactjs reactjs-flux flux react-router