Ich mag würde einige Anfangsdaten werden geladen, wenn meine erste Route wird gerendert auszuführen (zum Beispiel möchte ich eine Liste von Nachrichtenartikeln laden)Anfangsdaten werden geladen ReactJS
ich eine Komponente aus News.js genannt, der rendert die Artikel. Das Problem, das ich mit dem FLUX-Modell habe, ist, wo diese Anfangsdaten geladen werden.
Der Service, den ich gemacht habe, um die Daten zu laden, ist der folgende: Importanforderung von '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();
Dieser Dienst muss irgendwo aufgerufen werden. Nach Angaben der ReactJS Dokumentation würde ich diesen Vorgang wie folgt durchführen:
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>
)
}
}
Nun meine Frage ist, ist das nicht gegen den Fluss Prinzip? Sollten die Daten nicht als Aktion aufgerufen werden, die dann ihre Daten in einem Geschäft wie NewsStore speichert?
Sollte eine Aktion wie folgt aus:
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;
Im Chat-app example von reactjs sie bieten ein Beispiel API-Aufruf. Allerdings wird dieser API-Aufruf beim Start der Anwendung (in app.js) aufgerufen, was in meinem Szenario nicht anwendbar ist, da ich Routings verwenden möchte. Würde ich die Daten dann in den Router laden? (Ich benutze react-router)
Jede Rückmeldung zu diesem Thema oder Verbesserungen dieses Codes ist mehr als willkommen.
Dies ist in der Tat ein guter Weg. Ich würde jedoch gerne wissen, wie sie Anfangsdaten vom Server in diesen Laden füllen würden. Ich überprüfte die Chat-Anwendung, die einen API-Aufruf enthält, aber hier laden sie nur die Daten in der Haupt app.js, die nicht von Nutzen ist, wenn Sie mehrere Seiten haben https://github.com/facebook/flux/blob/ac1e4970c2a85d5030b65696461c271ba981a2a6 /examples/flux-chat/js/app.js#L23. –
Mein ursprünglicher Beitrag mit weiteren Details aktualisiert (Entschuldigung für ausführlichen Kommentar) –
@MaximGeerinck, danke, redigierte meine Antwort. –