NPM Star
Collections
  1. Home
  2. Compare
  3. react-redux vs redux-toolkit
NPM Compare

Compare NPM packages statistics, trends, and features

CollectionsVS Code extensionChrome extensionTermsPrivacyLinkTreeIndiehackersBig Frontendqiuyumi

Unable to load comparison data. Please try again later.

No README available

redux-toolkit

introduction

提供实用的工具函数,改善使用redux的开发体验,提供代码可读性。

  • createReducer a functional way to write reducer
  • createAction a simple way to write action
  • debugMiddleware a useful debug middleware

installation

mnpm install redux-toolkit

Usage

import { createAction, createReducer, debugMiddleware } from 'redux-toolkit'

createReducer

避免使用switch碰到的问题:

  • 不用担心各个case下的变量冲突问题
  • 可以解构action 和 state
  • 使用箭头函数
  • 当swtich case 过多时,object 的速度会比 switch 更快
  • 不再会被 break 和 default 恶心

下面是一个简单的reducer例子

import { ADD_TODO, DELETE_TODO, EDIT_TODO, COMPLETE_TODO, COMPLETE_ALL, CLEAR_COMPLETED } from '../constants/ActionTypes';

const initialState = [{
  text: 'Use Redux',
  completed: false,
  id: 0
}];

export default createReducer({
  [ADD_TODO]: (state, { text }) => [{
    id: state.reduce((maxId, todo) => Math.max(todo.id, maxId), -1) + 1,
    completed: false,
    text
  }, ...state],

  [DELETE_TODO]: (state, { id }) => state.filter(todo =>
    todo.id !== action.id
  ),

  [EDIT_TODO]: (state, { id, text }) => state.map(todo =>
    todo.id === id ?
      Object.assign({}, todo, { text }) :
      todo
  ),

  [COMPLETE_ALL]: state => {
    const areAllMarked = state.every(todo => todo.completed);
    return state.map(todo => Object.assign({}, todo, {
      completed: !areAllMarked
    }));
  },

  [CLEAR_COMPLETED]: state => state.filter(todo => todo.completed === false)
}, initialState)

createAction

提供更简单的方法去创建actionCreator。下面是通过actionCreator和普通方法进行对比。

创建没有payload的action

createAction('showAll');

function() {
  return {
    type: 'showAll'
  }
}

只有一个携带值

当只有一个需要传递给reducer的值时,接受一个key。

createAction('add', 'value');

function(value) {
  return {
    type: 'add',
    payload: {
      value: value
    }
  };
}

传递多个值

接受一个keys数组,会将参数按顺序放置在action的payload属性中。

createAction('add', ['num1', 'num2']);

function (num1, num2) {
  return {
    type: 'add',
    payload: {
      num1: num1,
      num2: num2  
    }
  };
}

根据函数创建action

接受一个将参数处理为payload的函数

createAction('add', (num1, num2) => {
  number1: num1,
  number2: num2,
  other: num1 * num2
})

function (num1, num2) {
  var getAction = (num1, num2) => {
    number1: num1,
    number2: num2,
    other: num1 * num2
  };
  return {
    type: 'add',
    payload: getAction(num1, num2)
  };
}

debugMiddleware

提供一个debug的middleware

features

  • if dispatched action don't match FSA rules, will throw Error
  • print the info of actions
  • print the old state after action dispatched
StarsIssuesVersionUpdatedⓘLast publish dateCreatedⓘPackage creation dateSizeⓘMinified + Gzipped size
R
react-redux
23,424139.3.0a month ago11 years agoinstall size 3.7 KB
R
redux-toolkit
201.1.24 years ago11 years agoinstall size 1.9 KB

Dependencies Comparison

react-redux

Dependencies

use-sync-external-store^1.4.0
@types/use-sync-external-store^0.0.6

Dev Dependencies

tsup^8.3.5
jsdom^25.0.1
react^19.2.0
redux^5.0.1
eslint^8.57.0
rimraf^5.0.7
vitest^1.6.0
codecov^3.8.3
prettier^3.3.3
cross-env^7.0.3
react-dom^19.2.0
typescript^5.8.2
@types/node^20.14.2
@types/react^19.0.1
@reduxjs/toolkit^2.2.5
@types/react-dom^19.0.1
@types/prop-types^15.7.12
typescript-eslint^7.12.0
eslint-plugin-react^7.34.2
@testing-library/dom^10.4.0
eslint-plugin-import^2.29.1
@testing-library/react^16.1.0
eslint-config-prettier^9.1.0
eslint-plugin-prettier^5.1.3
@microsoft/api-extractor^7.47.0
@testing-library/jest-dom^6.6.3
eslint-import-resolver-typescript^3.6.1

Peer Dependencies

react^18.0 || ^19
redux^5.0.0
@types/react^18.2.25 || ^19

redux-toolkit

Dependencies

debug^2.2.0
lodash^3.10.1
invariant^2.1.1
flux-standard-action^0.6.0

Dev Dependencies

Peer Dependencies