Skip to content

React-Redux 中间件

安装 React-Redux 插件

React-Redux 插件可以通过 npm 安装:

bash
npm install react-redux

使用 React-Redux 中间件

React-Redux 中间件是 React-Redux 插件的重要组成部分,它可以帮助我们管理 React 应用的状态。

1. Provider 组件

Provider 组件是 React-Redux 插件的核心组件,它可以让 React 组件和 Redux store 建立连接。

javascript
import React from 'react';
import ReactDOM from 'react-dom';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import App from './App';
import reducer from './reducer';

// 创建 Redux store
const store = createStore(reducer);    

// 使用 Provider 组件将 store 注入到 React 组件树中
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

2. connect() 函数

connect() 函数是 React-Redux 插件的主要功能,它可以将 React 组件和 Redux store 连接起来,使得 React 组件可以获取 Redux store 中的状态。

javascript
import React from 'react';
import { connect } from 'react-redux';
import { addTodo } from './actions';

// 定义 mapStateToProps 函数,将 Redux store 中的 state 映射到 props 上
const mapStateToProps = state => {
  return {
    todos: state.todos
  };
};

// 定义 mapDispatchToProps 函数,将 action creator 映射到 props 上
const mapDispatchToProps = dispatch => {
  return {
    addTodo: text => dispatch(addTodo(text))
  };
};

// 使用 connect() 函数将 mapStateToProps 和 mapDispatchToProps 连接到 App 组件上
const App = connect(
  mapStateToProps,
  mapDispatchToProps
)(App);

3. useSelector() 函数

useSelector() 函数是 React-Redux 插件提供的另一个辅助函数,它可以帮助我们获取 Redux store 中的状态。

javascript
import React from 'react';
import { useSelector } from 'react-redux';

// 在组件中使用 useSelector 获取 Redux store 中的状态
const App = () => {
  const todos = useSelector(state => state.todos);
  return (
    <div>
      {todos.map(todo => (
        <div key={todo.id}>{todo.text}</div>
      ))}
    </div>
  );
};

4. useDispatch() 函数

useDispatch() 函数是 React-Redux 插件提供的另一个辅助函数,它可以帮助我们触发 Redux store 中的 action。

javascript
import React from 'react';
import { useDispatch } from 'react-redux';

// 在组件中使用 useDispatch 触发 Redux store 中的 action
const AddTodo = () => {
  const dispatch = useDispatch();
  const handleClick = () => {
    dispatch(addTodo('Learn Redux'));
  };
  return (
    <button onClick={handleClick}>Add Todo</button>
  );
};