chciałbym wykonać pewne wstępne ładowanie danych, gdy moja pierwsza trasa jest renderowany (na przykład, chcę, aby załadować listę artykułów)Wstępne ReactJS ładowanie danych
zrobiłem komponent o nazwie News.js który renderuje artykuły. Problem występujący w modelu FLUX polega na tym, gdzie załadować te początkowe dane.
Usługa, którą wykonałem w celu załadowania danych, jest następująca: żądanie importu od "superagenta";
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();
Ta usługa musi zostać wywołana gdzieś. Zgodnie z dokumentacją ReactJS chciałbym wykonać tę operację tak:
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>
)
}
}
Teraz moje pytanie jest, czy nie jest to sprzeczne z zasadą strumienia? Czy dane nie powinny być wywoływane jako Akcja, która przechowuje dane w sklepie takim jak Magazyn Google?
Jeżeli działanie będzie jak następuje:
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;
W Chat-app example z reactjs stanowią one przykład wywołania API. Jednak to wywołanie API jest wywoływane podczas uruchamiania aplikacji (w app.js), co nie ma zastosowania w moim scenariuszu, ponieważ chciałbym używać routingu. Czy wtedy załadowałbym dane do routera? (Używam routera reagowania-)
Wszelkie uwagi dotyczące tej materii lub ulepszeń tego kodu jest bardziej niż mile widziane.
To naprawdę świetny sposób. Chciałbym jednak wiedzieć, w jaki sposób wypełniliby dane inicjacyjne z serwera do tego sklepu. Sprawdziłem aplikację Chat, która zawiera wywołanie API, ale tutaj właśnie ładują dane w głównym app.js, co nie jest przydatne, jeśli masz wiele stron https://github.com/facebook/flux/blob/ac1e4970c2a85d5030b65696461c271ba981a2a6 /examples/flux-chat/js/app.js#L23. –
Zaktualizowałem mój pierwotny post z dalszymi szczegółami (przepraszam za obszerny komentarz) –
@MaximGeerinck, dzięki, zredagowałem moją odpowiedź. –