GithubHelp home page GithubHelp logo

ptzagk / fetch-action-creator Goto Github PK

View Code? Open in Web Editor NEW

This project forked from charlesstover/fetch-action-creator

0.0 1.0 0.0 30 KB

Fetches using standardized, four-part asynchronous actions for redux-thunk.

Home Page: https://www.npmjs.com/package/fetch-action-creator

License: MIT License

JavaScript 46.04% TypeScript 53.96%

fetch-action-creator's Introduction

fetch-action-creator

Fetches using standardized, four-part asynchronous actions for redux-thunk.

Dispatch a single, asynchronous action that fetches a request, and your redux store will receive corresponding actions when your fetch API (1) requests, (2) resolves a response, (3) rejects an error, and/or (4) is aborted.

package build downloads minified size minzipped size

Install

  • npm install fetch-action-creator --save or
  • yarn add fetch-action-creator

Your redux store must be using the redux-thunk middleware.

Basic Example

import fetchActionCreator from 'fetch-action-creator';

const fetchEmployees = () =>
  fetchActionCreator(

    // Included in the action types received by your redux store.
    'EMPLOYEES',

    // URL to fetch.
    'https://my.business.com/employees.json'
  );

The above example will send a REQUEST_EMPLOYEES action to the redux store, followed by one of the following: ABORT_EMPLOYEES if the request was aborted, REJECT_EMPLOYEES if an error occurred, or RESOLVE_EMPLOYEES if the data was received successfully.

See the documentation for a list of action properties.

Advanced Example

import fetchActionCreator from 'fetch-action-creator';

// We want to include an employee's name in the fetch request.
const fetchAddEmployee = name =>
  fetchActionCreator(

    // Included in the action types received by your redux store.
    'ADD_EMPLOYEE',

    // URL to fetch.
    'https://my.business.com/employees.json',

    // Fetch options are configurable.
    {
      body: name,
      headers: {
        'Content-Type': 'text/plain; charset=utf-8'
      },
      method: 'POST'
    }

    // Action mutators can change the default actions sent to the redux reducers.
    {

      // An object mutator will EXTEND the default action sent to the redux reducer.
      // The abort action will now have a name property equal to the one passed to fetchAddEmployee.
      onAbort: { name }

      // The reject action will now have a name property equal to the one passed to fetchAddEmployee
      //    and a timestamp property equal to the time that the error occurred.
      onReject: {
        name,
        timestamp: Date.now()
      },

      // A function mutator will RECEIVE the default action sent and mutate it before passing it to the redux reducer.
      // The request action will now have a name property equal to the one passed to fetchAddEmployee.
      onRequest: requestAction => ({
        ...requestAction,
        name
      }),

      // The resolve action will now have a name property equal to the one passed to fetchAddEmployee
      //    and a timestamp property equal to the time that the error occurred.
      // You may mutate the action however you want.
      onResolve: resolveAction => {
        resolveAction.timestamp = Date.now();
        if (name.endsWith('*')) {
          resolveAction.type = 'RESOLVE_ADD_MANAGER';
        }
        return {
          ...resolveAction,
          name
        };
      }
    },

    // A conditional function will prevent the fetch request if it returns false.
    // The conditional function receives the current redux state as a parameter.
    state => {

      // If this request is already loading (handled in the reducer),
      //    don't make the same request again.
      if (state.employees[name].status === 'loading') {
        return false;
      }

      // People named Bob aren't allowed to work here.
      if (name === 'Bob') {
        return false;
      }

      // Allow the addition of anyone else.
      return true;
    }
  );

Parameters

  • id: string

    An ID used to generate the types for each dispatched action.

    Example: An ID of ADD_EMPLOYEE will dispatch the actions REQUEST_ADD_EMPLOYEE, RESOLVE_ADD_EMPLOYEE, REJECT_ADD_EMPLOYEE, and ABORT_ADD_EMPLOYEE.

  • url: string

    The URL to which you are dispatching a fetch request.

    See also: fetch parameters on MDN

  • init: null | RequestInit | () => RequestInit

    The fetch options which you are including in your fetch request or a function that returns said options.

    See also: fetch parameters on MDN

    Default: Empty object.

  • actions: Actions | null

    An object of action mutators that will change the default actions that are dispatched to the redux reducers.

    The keys of this object may be:

    • onAbort, which is used when your fetch request is aborted
    • onReject, which is used when your fetch request encountered an error
    • onRequest, which is used when your fetch request has been initiated
    • onResolve, which is used whe nyour fetch request has resolved successfully

    The values of this object may be an object, which will be merged with the default action.

    {
      onAbort: { myKey: 'myValue' }
    }
    // creates
    {
      myKey: 'myValue',
      type: 'ABORT_ID'
    }

    The values of this object may alternatively be a function, which will receive the default action and return a changed action.

    {
      onAbort: abortAction => ({
        type: abortAction.type.split('').reverse().join('')
      })
    }
    // creates
    {
      type: 'DI_TROBA'
    }

    Action properties

    • onAbort

      • no additional properties
    • onReject

      • error contains a string with the error message. This may be either a JavaScript error or server response.

      • statusCode contains an integer value of the response status code, e.g. 404.

    • onRequest

      • abortController contains an AbortController instance.

        If you desire to abort any of your fetch requests, you should store this instance in your redux state.

        If the user's browser does not support aborting requests, the value will be null.

    • onResolve

      • body contains the body of the response. This can be a JavaScript object or string.

      • headers contains an instance of Headers with which the server responded to the request.

      • statusCode contains an integer value of the response status code, e.g. 200.

  • conditional?: (state: Object) => boolean

    If present, this function is called prior to the fetch request.

    If it returns true, the fetch request will continue. If it returns false, the entire asynchronous action will be ignored.

    The parameter of this function is a current snapshot of your redux state.

fetch-action-creator's People

Contributors

charlesstover avatar

Watchers

 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.