Представьте себе что-то вроде Quora.
[
{
type: "question",
answers: [
{
type: "answer",
upvotes: [
{
type: "upvote"
}
/* more upvotes */
],
comments [
{
type: "comment"
}
/* more comments */
]
}
/* more answers */
]
}
/* more questions */
]
У меня наверняка есть что-то вроде QuestionsStore
. Но для всех дочерних объектов я не уверен, что с ними делать. Исходя из Backbone, я думаю, что каждый ответ должен иметь UpvotesStore
и CommentsStore
, а компоненты получат свои данные из этих Магазинов и подписываются на обновления от них. Насколько я понимаю Flux, "дочерние" /реляционные хранилища несколько необычны.
Когда каждый компонент подписывается на обновления от QuestionsStore
, что приводит к чему-то вроде:
/* in CommentsComponent */
onUpdate: function() {
this.setState({
comments: QuestionsStore.getComments({questionId: 1, answerId: 1});
});
}
или более экстремальный:
/* in CommentComponent */
onUpdate: function() {
this.setState(QuestionsStore.getComment({questionId: 1, answerId: 1, commentId: 1}));
}
Поскольку реляционные данные живут в древовидной структуре, каждый компонент должен знать весь "родительский" идентификатор, чтобы иметь возможность запрашивать свои данные из QuestionsStore
. Я нахожу это как-то странным.
Итак, каков наилучший шаблон потока для работы с реляционной структурой (один ко многим)?