Who is responsible to fetch data from server in a flux app with caching?
Asked Answered
U

1

7

In the flux webchat example application and in the README diagram, it seems like the action creator should retrieve the data from the server.

flux data flow

The problem I see is that no fetch might be required if the data is already in the store. The store is the only one to know, so the action need to actually be dispatched.

I think it's better to fetch dernormalized data when possible, to minimize xhr calls. If the store is denormalized e.g. MessageStore will contain all the data it needs to render Messages. Every message look like

{
 "id": 42
 "message": "Héllo, you tried reactjs-flux too. Awesome isn't it!"
 "user": {id: 1337, username: "amirouche", bio: "maker"},
 "likes": [{id: 2600, username: "NinjaTurtle"}, {id: 2601, username: "Peer"}
}

The store might have the responsability (through events?) to update the UserStore with the partial user models.

Another way I think of, is to have some normalized stores, and create a specific stores with a schema the view expects.

In this situation, it seems to me the action creator is only useful to dispatch the payload ie. it's useless.

What do you think?

Uriiah answered 6/2, 2015 at 22:13 Comment(0)
W
5

I usually have my store dealing with fetching data. Doing it this way make sure that all the logic can be managed by the store itself, and you have total control on when/how/why you fetch data.

The fact that you can also have stores communicating with each other is also another pro for why the stores should be in charge of handling/fetching data.

Also, as the Flux pattern describes: "Stores contain the application state and logic. Their role is somewhat similar to a model in a traditional MVC, but they manage the state of many objects.." It does make sense to have the stores managing the fetching of data from APIs/server-side.

Wastrel answered 24/2, 2015 at 16:51 Comment(2)
thanks for answering (my badly formulated question). Seems like the diagram I posted is outdated, I can find it on flux website. thanks. ref: facebook.github.io/flux/docs/overview.html#contentUriiah
I try to access the cache.Uriiah

© 2022 - 2024 — McMap. All rights reserved.