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

扶醉桌前 提交于 2019-12-05 23:40:52

问题


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

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?


回答1:


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.



来源:https://stackoverflow.com/questions/28375718/who-is-responsible-to-fetch-data-from-server-in-a-flux-app-with-caching

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!