Convert Figma logo to code with AI

reduxjs logoreact-redux

Official React bindings for Redux

23,371
3,368
23,371
29

Top Related Projects

227,213

The library for web and native user interfaces.

27,458

Simple, scalable state management.

28,416

🗃️ Centralized State Management for Vue.js.

Reactive State for Angular

8,477

The Redux Framework

30,713

A reactive programming library for JavaScript

Quick Overview

React Redux is the official React binding for Redux, a predictable state container for JavaScript apps. It allows React components to read data from a Redux store and dispatch actions to update that store, providing a robust and scalable state management solution for React applications.

Pros

  • Centralized state management, making it easier to track and debug application state
  • Predictable state updates through pure reducer functions
  • Time-travel debugging capabilities
  • Extensive ecosystem and community support

Cons

  • Steep learning curve for beginners
  • Increased boilerplate code compared to simpler state management solutions
  • Can be overkill for small to medium-sized applications
  • Performance considerations for large-scale applications if not optimized properly

Code Examples

  1. Connecting a React component to Redux store:
import { connect } from 'react-redux';

const mapStateToProps = (state) => ({
  todos: state.todos
});

const mapDispatchToProps = {
  addTodo: (text) => ({ type: 'ADD_TODO', payload: text })
};

export default connect(mapStateToProps, mapDispatchToProps)(TodoList);
  1. Using hooks to access Redux store:
import { useSelector, useDispatch } from 'react-redux';

function TodoList() {
  const todos = useSelector(state => state.todos);
  const dispatch = useDispatch();

  const addTodo = (text) => {
    dispatch({ type: 'ADD_TODO', payload: text });
  };

  // Render component
}
  1. Creating a Redux slice with Redux Toolkit:
import { createSlice } from '@reduxjs/toolkit';

const todosSlice = createSlice({
  name: 'todos',
  initialState: [],
  reducers: {
    addTodo: (state, action) => {
      state.push({ id: Date.now(), text: action.payload, completed: false });
    },
    toggleTodo: (state, action) => {
      const todo = state.find(todo => todo.id === action.payload);
      if (todo) {
        todo.completed = !todo.completed;
      }
    }
  }
});

export const { addTodo, toggleTodo } = todosSlice.actions;
export default todosSlice.reducer;

Getting Started

  1. Install React Redux and Redux Toolkit:

    npm install react-redux @reduxjs/toolkit
    
  2. Create a Redux store:

    import { configureStore } from '@reduxjs/toolkit';
    import rootReducer from './reducers';
    
    const store = configureStore({
      reducer: rootReducer
    });
    
  3. Wrap your React app with the Provider component:

    import { Provider } from 'react-redux';
    import store from './store';
    
    ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>,
      document.getElementById('root')
    );
    
  4. Use useSelector and useDispatch hooks in your components to access the store and dispatch actions.

Competitor Comparisons

227,213

The library for web and native user interfaces.

Pros of React

  • Broader scope and functionality as a complete UI library
  • Larger community and ecosystem with more resources and third-party components
  • More frequent updates and improvements from Facebook's dedicated team

Cons of React

  • Steeper learning curve for beginners due to its larger API surface
  • Requires additional libraries for state management in complex applications
  • Larger bundle size compared to more focused libraries

Code Comparison

React:

import React from 'react';

function App() {
  return <div>Hello, React!</div>;
}

React Redux:

import { Provider } from 'react-redux';
import store from './store';

function App() {
  return (
    <Provider store={store}>
      <div>Hello, React Redux!</div>
    </Provider>
  );
}

Summary

React is a comprehensive UI library for building user interfaces, while React Redux is a state management solution specifically designed to work with React applications. React offers a wider range of features and a larger ecosystem, but may be more complex for beginners. React Redux provides a structured approach to managing application state, which can be beneficial for larger, more complex projects. The choice between the two depends on the specific needs of your project and your team's expertise.

27,458

Simple, scalable state management.

Pros of MobX

  • Simpler setup and less boilerplate code
  • Automatic tracking of state changes and re-rendering
  • More flexible and less opinionated about state structure

Cons of MobX

  • Less predictable state changes due to mutable state
  • Steeper learning curve for developers used to immutable state patterns
  • Potential performance issues with large, complex state trees

Code Comparison

React-Redux:

const mapStateToProps = state => ({
  todos: state.todos
});
const mapDispatchToProps = dispatch => ({
  addTodo: text => dispatch(addTodo(text))
});
export default connect(mapStateToProps, mapDispatchToProps)(TodoList);

MobX:

@observer
class TodoList extends React.Component {
  @observable todos = [];
  @action addTodo = text => {
    this.todos.push(new Todo(text));
  }
}

React-Redux uses a more explicit approach to connecting components to the store, while MobX leverages decorators and observables for a more concise syntax. React-Redux promotes immutability and unidirectional data flow, whereas MobX allows for direct mutations of the observable state. The choice between the two often depends on project requirements, team preferences, and the desired level of control over state management.

28,416

🗃️ Centralized State Management for Vue.js.

Pros of Vuex

  • Simpler setup and less boilerplate code required
  • Tighter integration with Vue.js, including automatic component updates
  • Built-in support for modules, making it easier to organize large-scale applications

Cons of Vuex

  • Limited to Vue.js ecosystem, not as flexible for use with other frameworks
  • Less robust middleware system compared to React Redux
  • Smaller community and ecosystem, potentially fewer third-party tools and resources

Code Comparison

Vuex:

const store = new Vuex.Store({
  state: { count: 0 },
  mutations: {
    increment(state) { state.count++ }
  }
})

React Redux:

const rootReducer = (state = { count: 0 }, action) => {
  switch (action.type) {
    case 'INCREMENT': return { ...state, count: state.count + 1 }
    default: return state
  }
}
const store = createStore(rootReducer)

Both Vuex and React Redux are popular state management solutions for their respective frameworks. Vuex offers a more straightforward approach with Vue.js-specific optimizations, while React Redux provides greater flexibility and a more robust ecosystem. The choice between them often depends on the specific project requirements and the developer's familiarity with Vue.js or React.

Reactive State for Angular

Pros of NgRx Platform

  • Integrated with Angular's dependency injection system
  • Provides a more comprehensive ecosystem with additional tools like Entity and Effects
  • Better TypeScript support and stricter type checking

Cons of NgRx Platform

  • Steeper learning curve due to more complex architecture
  • Requires more boilerplate code compared to React Redux
  • Specific to Angular framework, limiting portability

Code Comparison

NgRx Platform:

@Component({...})
export class MyComponent {
  data$ = this.store.select(selectData);
  constructor(private store: Store) {}
  loadData() {
    this.store.dispatch(loadData());
  }
}

React Redux:

function MyComponent() {
  const data = useSelector(selectData);
  const dispatch = useDispatch();
  const loadData = () => dispatch(loadData());
  return (...);
}

Both libraries provide state management solutions for their respective frameworks. NgRx Platform offers a more opinionated and feature-rich approach, while React Redux focuses on simplicity and flexibility. The choice between them often depends on the specific project requirements and the preferred framework (Angular or React).

8,477

The Redux Framework

Pros of Rematch

  • Simplified API with less boilerplate code
  • Built-in async actions and effects handling
  • Automatic code splitting for models

Cons of Rematch

  • Smaller community and ecosystem compared to React Redux
  • Less flexibility for complex state management scenarios
  • Potential learning curve for developers familiar with traditional Redux

Code Comparison

React Redux:

const INCREMENT = 'INCREMENT';
const incrementAction = () => ({ type: INCREMENT });
const counterReducer = (state = 0, action) => {
  if (action.type === INCREMENT) return state + 1;
  return state;
};

Rematch:

const counter = {
  state: 0,
  reducers: {
    increment(state) {
      return state + 1;
    },
  },
};

Rematch simplifies the process of defining actions and reducers by combining them into a single model object. This approach reduces boilerplate code and makes the state management more intuitive. However, React Redux's explicit action creators and reducers offer more flexibility for complex scenarios and are more familiar to developers accustomed to traditional Redux patterns.

Both libraries aim to provide efficient state management solutions for React applications, but they differ in their approach to simplicity, flexibility, and ecosystem support. The choice between them depends on project requirements, team expertise, and personal preferences.

30,713

A reactive programming library for JavaScript

Pros of RxJS

  • More powerful and flexible for handling complex asynchronous operations
  • Supports a wide range of operators for data transformation and manipulation
  • Can be used in various JavaScript environments, not limited to React applications

Cons of RxJS

  • Steeper learning curve due to its more complex concepts and API
  • May be overkill for simpler state management scenarios
  • Less integrated with React ecosystem compared to React Redux

Code Comparison

RxJS:

import { fromEvent } from 'rxjs';
import { map, debounceTime, distinctUntilChanged } from 'rxjs/operators';

const input = document.getElementById('search-input');
fromEvent(input, 'input').pipe(
  map(event => event.target.value),
  debounceTime(300),
  distinctUntilChanged()
).subscribe(value => console.log(value));

React Redux:

import { useSelector, useDispatch } from 'react-redux';
import { setSearchTerm } from './searchSlice';

function SearchComponent() {
  const dispatch = useDispatch();
  const searchTerm = useSelector(state => state.search.term);
  
  const handleInputChange = (e) => {
    dispatch(setSearchTerm(e.target.value));
  };

  return <input value={searchTerm} onChange={handleInputChange} />;
}

This comparison highlights the different approaches to handling user input and state management between RxJS and React Redux. RxJS offers more advanced stream processing capabilities, while React Redux provides a simpler, React-specific solution for state management.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

React Redux

Official React bindings for Redux. Performant and flexible.

GitHub Workflow Status npm version npm downloads #redux channel on Discord

Installation

Create a React Redux App

The recommended way to start new apps with React and Redux is by using our official Redux+TS template for Vite, or by creating a new Next.js project using Next's with-redux template.

Both of these already have Redux Toolkit and React-Redux configured appropriately for that build tool, and come with a small example app that demonstrates how to use several of Redux Toolkit's features.

# Vite with our Redux+TS template
# (using the `degit` tool to clone and extract the template)
npx degit reduxjs/redux-templates/packages/vite-template-redux my-app

# Next.js using the `with-redux` template
npx create-next-app --example with-redux my-app

An Existing React App

React Redux 8.0 requires React 16.8.3 or later (or React Native 0.59 or later).

To use React Redux with your React app, install it as a dependency:

# If you use npm:
npm install react-redux

# Or if you use Yarn:
yarn add react-redux

You'll also need to install Redux and set up a Redux store in your app.

This assumes that you’re using npm package manager with a module bundler like Webpack or Browserify to consume CommonJS modules.

If you don’t yet use npm or a modern module bundler, and would rather prefer a single-file UMD build that makes ReactRedux available as a global object, you can grab a pre-built version from cdnjs. We don’t recommend this approach for any serious application, as most of the libraries complementary to Redux are only available on npm.

Documentation

The React Redux docs are published at https://react-redux.js.org .

How Does It Work?

The post The History and Implementation of React-Redux explains what it does, how it works, and how the API and implementation have evolved over time.

There's also a Deep Dive into React-Redux talk that covers some of the same material at a higher level.

License

MIT

NPM DownloadsLast 30 Days