Skip to content

A helper function to simplify the subscription of history in dva.

Notifications You must be signed in to change notification settings

Ma63d/dva-subscribe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jul 18, 2017
2da405b · Jul 18, 2017

History

15 Commits
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 17, 2017
Jul 17, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017
Jul 18, 2017

Repository files navigation

dva-subscribe

Build Status Coverage Status NPM downloads

A helper function which can simplify the subscription of history in dva.

Usage

import subscribe from 'dva-subscribe'

// basic usage
// subscribe(history, dispatch, ...rules)

//in dva's subscriptions
subscriptions: {
    setup ({ history, dispatch }) {
        // you may code this before
        // history.listen (({ pathname, query }) => {
        //     if (pathname === '/index') {
        //         const {id} = query
        //         dispatch({ type: 'load', payload: {id} })
        //     } else if (pathname.startsWith('/a')) {
        //         const match = pathToRegexp('/a/:a/b/:b').exec(pathname);
        //         if (match) {
        //             const {name} = query
        //             dispatch({
        //                 type: 'fetch',
        //                 payload: { a: match[1], b: match[2] },
        //             })
        //             dispatch({
        //                 type: 'init',
        //                 payload: { name },
        //             })
        //         }
        //     }
        // })

        // now you can use following
        subscribe (history, dispatch, {
            url: '/a/:a/b/:b',
            queries: ['name'],
            actionCreator: (a, b, name) => [{
                type: 'fetch',
                payload: {a, b}
            }, {
                type: 'init',
                payload: { name },
            }]
        }, {
            url: '/index',
            queries: ['id'],
            actionCreator: (id) => ({ type: 'load', payload: {id} })
        })
    },
}

Api

subscribe(history, dispatch, ...rules)

  • @param history: Object: react-router history
  • @param dispatch: Function: dva's dispatch
  • @param rules: Array<Object rule> url rules, describe the pattern to match url and dispatch action
    • rule: Object url match option:
      • field url: String, the url pattern, etc '/a/:b/:c/x'
      • field queries: Array, default: [], list the queries you care, etc ['keyword', 'time']. If the pattern matches current url, only when queries you list or params in url are different with last url(if last url also matches the specified pattern) will the actionCreator executed and action dispatched, which is useful to avoid unnecessary dispatching.
      • field actionCreator: Function a function that will return action(s) you want to dispatch when url match and params/queries are different(if last url also matches).It will receive params and queries you speciafied as arguments: actionCreator(...params, ...queries)
      • field everyTime: Boolean optional, default: false, if true, the actionCreator will always be fired and the action it returns will always be dispatched as long as the url matches the pattern you specified.
  • @return unListen: Function to stop listening, call the function returned from subscribe()

About

A helper function to simplify the subscription of history in dva.

Resources

Stars

Watchers

Forks

Packages

No packages published