📜  React Redux示例(1)

📅  最后修改于: 2023-12-03 14:46:57.875000             🧑  作者: Mango

React Redux示例

React Redux是一种常用的状态管理库,它提供了一种方便的方式来管理React应用程序中的状态。本文将介绍React Redux的基本概念、用法和示例。

Redux基本概念

Redux的核心概念有三个:StoreActionsReducers

Store

Store是Redux中的状态容器,它存储了整个应用程序的状态。每个应用程序通常只有一个store实例,可以通过以下方式进行创建:

import { createStore } from 'redux';

const store = createStore(reducer);

其中,reducer是用于更新应用程序状态的纯函数。

Actions

Action是Redux中触发状态更新的方式,它通常是一个包含type字段的对象,例如:

const increment = { type: 'INCREMENT' };
Reducers

Reducers是纯函数,用于根据Action来更新Store中的状态。它接收两个参数:当前状态和Action,例如:

function counter(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
}

上述代码表示一个简单的计数器,根据Action来更新计数器状态。

React Redux用法

React Redux提供的组件和API,可方便地将Redux与React集成。

Provider

Provider是React Redux的一个组件,用于为整个React应用程序提供Redux store。例如:

import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import rootReducer from './reducers'; // 导入reducer函数

const store = createStore(rootReducer);

render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

在上述代码中,Provider为整个App提供了Redux store实例。

Connect

Connect是另一个React Redux组件,用于连接React组件和Redux store。它将Redux store作为属性传递给React组件,同时将Action Creator作为属性传递给React组件,例如:

import React from 'react';
import { connect } from 'react-redux';

class Counter extends React.Component {
  render() {
    const { count, dispatchIncrement } = this.props;

    return (
      <div>
        <h1>{count}</h1>
        <button onClick={dispatchIncrement}>Increment</button>
      </div>
    );
  }
}

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

const mapDispatchToProps = dispatch => ({
  dispatchIncrement: () => dispatch({ type: 'INCREMENT' })
});

export default connect(mapStateToProps, mapDispatchToProps)(Counter);

在上述代码中,mapStateToProps函数将store中的状态映射到Counter组件的props中,mapDispatchToProps函数将Action Creator映射到Counter组件的props中。connect函数将Redux store和Action Creator作为props传递给Counter组件。

示例代码

以下是一个完整的React Redux示例代码,其中包含一个简单的计数器组件和一个颜色选择器组件。

前置依赖

本示例需使用以下依赖:

npm install react react-dom redux react-redux
Reducer
const initialCounterState = 0;

function counter(state = initialCounterState, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
}

const initialColorState = 'red';

function color(state = initialColorState, action) {
  switch (action.type) {
    case 'SET_COLOR':
      return action.payload;
    default:
      return state;
  }
}

export default combineReducers({
  counter,
  color
});
Action Creator
export const increment = () => ({ type: 'INCREMENT' });
export const decrement = () => ({ type: 'DECREMENT' });
export const setColor = color => ({ type: 'SET_COLOR', payload: color });
Counter组件
import React from 'react';
import { connect } from 'react-redux';
import { increment, decrement } from '../actions';

class Counter extends React.Component {
  render() {
    const { count, dispatchIncrement, dispatchDecrement } = this.props;

    return (
      <div>
        <h1>{count}</h1>
        <button onClick={dispatchIncrement}>Increment</button>
        <button onClick={dispatchDecrement}>Decrement</button>
      </div>
    );
  }
}

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

const mapDispatchToProps = dispatch => ({
  dispatchIncrement: () => dispatch(increment()),
  dispatchDecrement: () => dispatch(decrement())
});

export default connect(mapStateToProps, mapDispatchToProps)(Counter);
ColorPicker组件
import React from 'react';
import { connect } from 'react-redux';
import { setColor } from '../actions';

class ColorPicker extends React.Component {
  render() {
    const { color, dispatchSetColor } = this.props;

    return (
      <div>
        <p>Selected color: {color}</p>
        <button onClick={() => dispatchSetColor('red')}>Red</button>
        <button onClick={() => dispatchSetColor('green')}>Green</button>
        <button onClick={() => dispatchSetColor('blue')}>Blue</button>
      </div>
    );
  }
}

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

const mapDispatchToProps = dispatch => ({
  dispatchSetColor: color => dispatch(setColor(color))
});

export default connect(mapStateToProps, mapDispatchToProps)(ColorPicker);
App组件
import React from 'react';
import Counter from './components/Counter';
import ColorPicker from './components/ColorPicker';

class App extends React.Component {
  render() {
    return (
      <div>
        <Counter />
        <ColorPicker />
      </div>
    );
  }
}

export default App;
入口文件
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import rootReducer from './reducers';
import App from './App';

const store = createStore(rootReducer);

render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);
总结

React Redux是一个非常有用的状态管理库,它提供了方便的方式来管理React应用程序中的状态。在本文中,我们介绍了Redux的基本概念和React Redux的用法,并提供了一个示例代码,希望对读者有所帮助。