fluxible-resolver
fluxible-resolver is built on top of react-resolver and connectToStores, allowing you to fetch prop values asynchronously before rendering your component, using fluxible actions and stores. In addition, you can declare dependencies on other resolvers so you can assume they are available when resolving your depenent prop.
You can think of fluxible-resolve like a CDN. When a request comes in first we check if we already have the content stored in our cache. If so, great, return the content. If not, fetch it from the original source. In this case, the incoming request is React rendering your component, the cache is getStateFromStores
+ isResolved
, and the http client that fetches from the original source is resolver
.
resolveToStores
Takes an object of resolvers, keyed by the name of the prop they are resolving, and doesn't render the underlying component until all data is available.
resolver fields
- dependencies
Array<String>
: optional array of strings, naming either props (must be specified via propTypes) or other resolvers. - getStateFromStores
(FluxibleContext, Array<any>): any
: required function that takes context and dependency values and returns the current value for the prop. - isResolved
(any, Array<any>): boolean
: optional function which takes the current value and the dependency values and returns whether the prop value is available. - resolver
(FluxibleContext, Array<any>): Promise
: required fluxible action that takes the arry of dependency values as the payload and fetches the value. - stores
Array<FluxibleStore | String>
: required array of fluxible stores, or store names.
import { resolveToStores } from 'fluxible-resolver';
const resolvers = {
propName: {
dependencies: [],
getStateFromStores: (context, dependencyValues) => context.getStore(PropStore).getValue(),
isResolved: (currentValue, dependencyValues) => !!currentValue,
resolver: (context, dependencyValues) => context.executeAction(fetchPropValue),
stores: [PropStore]
}
};
const propTypes = {
};
const Container = resolveToStores(resolvers, propTypes)(Component);