redux-meteor-subs
Wrap reducers to automatically update the state based on subscriptions.
Usage
;;; // the todos collection const todosReducer = { // the reducer function to wrap around}; const wrappedTodosReducer = ; const store = ;;
Explanation
1. Importing
;;; // the todos collection
- We first import
wrap()
andcommit()
functions fromredux-meteor-subs
. - We then import the collection we want to work on:
Todos
.
2. Wrapping
const todosReducer = { // the reducer function to wrap around}; const wrappedTodosReducer = ;
wrap()
returns a new reducer that wraps around a given reducer. All the funcionality of the initial reducer is preserved. However, the new reducer will also automatically update the state whenever the subscribed data changes.- The first argument for
wrap()
is the original reducer. This is just a regular reducer function that we would create normally. - The second one is a configuration object that has 2 keys. The first key:
name
is the name of the publication. In our example,todos.public
is the publication we want our todosReducer to subscribe to. The second key:getData()
is a function that is used to replace the state.
3. Committing
const store = ;;
- We pass our wrapped reducer into
createStore()
, just like we would pass any reducer. - Finally, we pass
store.dispatch
intocommit()
. This is the last step we need to take to automatically dispatch actions that make the wrapped reducers update the state reactively on subscriptions. - If you forget to commit, you will neither subscribe, nor dispatch the necessary action for your reducer to update the state.
Extra Example (Multiple Subscriptions)
;;;; const todosReducer = { // a reducer function to wrap around}; const postsReducer = { // another reducer function to wrap around}; const wrappedTodosReducer = ; const wrappedPostsReducer = ; const appReducer = ; const store = ;;
In this example, the state is an object with keys todos
and posts
. Using the wrap()
function, we have made the reducers responsible for these keys effectively update their states whenever there's a change in the subscribed data.