Giter Club home page Giter Club logo

redux-api-call's Introduction

redux-api-call

Step 1: Create constants

export const REDUX_PRODUCT_LIST = 'productList'
export const REDUX_PROJECT_LIST = 'project.list'
export const REDUX_PROJECT_DETAIL = 'project.detail'

Step 2: Create actions

const actionTypes = apiCallActionsCreator(REDUX_PROJECT_LIST)

export const refetch = () => async (dispatch, getState) => {
  dispatch({ type: actionTypes.request, payload: { next: null, count: 0 } })
  try {
    const { search } = apiCallSelector(getState(), REDUX_PROJECT_LIST, ['search'])
    const { data, next, count } = await getComponentList({
      search,
      structure_slug: STRUCT_SLUG_PROJECT,
    })
    dispatch({ type: actionTypes.success, payload: { data, next, count } })
  } catch (error) {
    dispatch({ type: actionTypes.failure, payload: { error } })
  }
}

export const fetchMore = () => async (dispatch, getState) => {
  try {
    const {
      search, data: prevData, loading, loadingMore, next: page,
    } = apiCallSelector(getState(), REDUX_PROJECT_LIST, ['search', 'data', 'loading', 'loadingMore', 'next'])
    if (!prevData || !page || loading || loadingMore) {
      return
    }
    dispatch({ type: actionTypes.requestMore })
    const { data, count, next } = await getComponentList({
      search,
      page,
      structure_slug: STRUCT_SLUG_PROJECT,
    })
    dispatch({ type: actionTypes.successMore, payload: { data, next, count } })
  } catch (error) {
    dispatch({ type: actionTypes.failureMore, payload: { error } })
  }
}

Step 3: Create reducers

export default combineReducers({
  login: LoginReducer,
  ...apiCallReducers({
    [REDUX_PRODUCT_LIST]: {},
    [REDUX_PROJECT_LIST]: { search: 'abc' }, //initial state
    [REDUX_PROJECT_DETAIL]: {},
  }),
})

Step 4: Connect react-redux

const mapStateToProps = state => apiCallSelector(state, REDUX_PROJECT_LIST, [
  'filter', 'search', 'data', 'loading', 'loadingMore', 'count',
])

export default connect(mapStateToProps)(ProjectListContainer);

redux-api-call's People

Contributors

drminh2807 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.