fluxible icon indicating copy to clipboard operation
fluxible copied to clipboard

[fluxible] Consider adding `executeAction` to store context

Open mridgway opened this issue 10 years ago • 11 comments

Bill Fisher's talk and some of the Flux articles talk about performing API calls directly from the stores. The responses from these API calls should always go through an action creator, which would require access to the executeAction method.

The fluxible-plugin-fetchr should also be updated to expose the service methods as well.

mridgway avatar Dec 11 '14 04:12 mridgway

I would like to see this as well, for the same reasons cited in the Ian Obermiller interview.

For now, I've been working around it by putting more "smarts" into my components but I'd rather not.

acrispino avatar Dec 30 '14 04:12 acrispino

My understanding is that stores should not be interacting with an API. Only Action Creators should interact with the API layer according to this diagram: https://github.com/facebook/flux and this article: http://facebook.github.io/react/blog/2014/10/17/community-roundup-23.html#async-requests-with-flux-revisited .

trshafer avatar Jan 27 '15 05:01 trshafer

I think you're right about that but in this case, what's at issue is whether or not stores should have access to action creators or not.

acrispino avatar Jan 28 '15 04:01 acrispino

Exactly. The idea is that stores could call an API themselves and then call an action creator when the response has come back. This is how some other Flux implementors are doing it.

This isn't as easy as just exposing the executeAction method to the stores though. We have to make sure that we can track when a store has completed its async calls so that we know when it's safe to render the markup on the server.

I have some ideas of how we could do that, but it would require some changes to the way that actionContext and storeContext work.

mridgway avatar Feb 04 '15 02:02 mridgway

+1. I've been thinking aloud about this in the gitter room, and @koulmomo pointed me to this. I feel it right to have the domain/store which knows the state of data to trigger the action, raise a PENDING event, and the result comes through the dispatcher. Please let me know you also felt the need of it and would be considering to implement this. thanks

A SO post where Bill Fischer and Brandon (Fluxxor) agrees with this approach. http://stackoverflow.com/questions/26632415/where-should-ajax-request-be-made-in-flux-app

bsr203 avatar Feb 16 '15 22:02 bsr203

:+1: for this too. The article @mridgway mentioned having only write actions instead of read, which to me kinda makes sense. Right now we don't think we have a layer that controls data freshness (whether to pull from memory, cache, localStorage... or fetch) and since Stores have the data that makes it an ideal layer to have that control. Which means Stores might need a way to fetch data directly.

longlho avatar Apr 24 '15 01:04 longlho

:+1: I was thinking about this for a bit, I like the purity of the one-way data flow. At the same time right now I'm trying to leverage flux-router-component's CHANGE_ROUTE_SUCCESS to fetch some data.

Also the whole localStorage vs fetch use cases is intriguing.

Update: I forgot that you can assign actions to routes, so that solved my problem.

quangv avatar May 01 '15 20:05 quangv

+1

I was about to create an issue on this myself just now. I'd be happy to help out developing this if it would speed things along.

marnusw avatar May 26 '15 13:05 marnusw

+1

phuson avatar May 26 '15 20:05 phuson

For use until this is supported natively in Fluxible I've created marnusw/fluxible-plugin-store-execute-action.

marnusw avatar Jun 13 '15 14:06 marnusw

Not sure if anybody is still thinking about this, but we went form vanilla flux -> reflux -> fluxible and from being able to dispatch action from store to stores without access to dispatch. Because you have access to stores from actionCreator context, you can always check what data you already have and decide accordingly how the action actually get the data. This makes actionCreator more complex, but reduces complexity of the store which was more beneficial for us when our application got bigger.

aocenas avatar Nov 23 '15 09:11 aocenas