Redux + React + TypeScript 入门

前言

Redux 是一种状态管理库,它使得应用中状态的管理变得更加简单。而 React 和 TypeScript 同时也成为了现在前端开发中最主流的技术栈之一。Redux 还与 React 有着天然的结合。所以,学习 Redux + React + TypeScript 成为一名前端开发人员的必修课之一。

本文将详细介绍 Redux + React + TypeScript,包括 Redux 的基础知识、React 与 Redux 的结合、如何使用 TypeScript 编写 Redux 应用程序以及使用 TypeScript 的类型系统确保 Redux 应用程序的类型安全。

Redux 基础概念

在学习 Redux 之前,首先要理解 Redux 的一些基本概念:

  • Actions:定义应用程序中发生的事件的类型,比如 ADD_TODOREMOVE_TODO
  • Reducers:处理应用程序中发生的事件,并更新应用程序的状态。
  • Store:包含应用程序的当前状态以及将要执行的操作。
  • Dispatch:通知应用程序更新它的状态。
  • Selectors:从应用程序的状态中选择特定的值。

Redux 的核心思想是应用程序的整个状态被存储在单个对象中,这个对象称为“store”。Redux 中涉及到 store 的所有操作都是不可变的。当我们想要更新 store 的状态时,我们实际上是创建了一个新的 store 对象,该对象与现有的 store 对象几乎相同,只是状态已经更新。

React 和 Redux 的结合

将 React 和 Redux 结合起来需要遵循一些特定的模式:

  1. 将应用程序的状态作为 store
  2. 使用 Provider 提供 store,使所有的组件都可以访问它
  3. 使用 connect 函数连接组件到 store

下面通过一个示例来展示 React 和 Redux 的结合。

首先需要创建一个 Redux 应用程序的 store,以下是示例代码:

import { createStore } from 'redux';
import rootReducer from './reducers';

const store = createStore(rootReducer);

export default store;

在这段代码中,createStore 函数是可用的,它接受一个 reducer 并创建一个 Redux store。这需要一个 reducer 函数作为参数。reducer 函数的责任是处理应用程序中发生的事件,这些事件是由 action 发起的。下面是一个 reducer 函数的示例代码:

import { combineReducers } from 'redux';
import todosReducer from './todosReducer';
import visibilityFilterReducer from './visibilityFilterReducer';

const rootReducer = combineReducers({
  todos: todosReducer,
  visibilityFilter: visibilityFilterReducer
});

export default rootReducer;

在这段代码中,我们将应用程序的整个状态分为两个部分:todos 和 visibilityFilter。每个部分都有自己的 reducer 函数,处理相关的 action 类型。

当 store 被创建后,可以使用 Redux 提供的 Provider 组件将 store 提供给所有的子组件。使用 connect 函数连接组件到 store 的过程在这里不再赘述。更详细的内容请参考 React-Redux 的官方文档。

使用 TypeScript 编写 Redux 应用程序

Redux 内置了 TypeScript 类型定义。在创建 Redux 应用程序时,我们可以使用 TypeScript 提供的类型校验和类型推断,让我们的代码更加类型安全。

下面是一个 TypeScript 编写的示例,展示了如何定义一个 action:

interface AddTodoAction {
  type: 'ADD_TODO';
  payload: {
    id: number;
    text: string;
  };
}

interface RemoveTodoAction {
  type: 'REMOVE_TODO';
  payload: {
    id: number;
  };
}

type TodosActions = AddTodoAction | RemoveTodoAction;

在这段代码中,我们定义了两个 action 类型:AddTodoActionRemoveTodoAction,然后用一个 union 类型 TodosActions 将它们组合在一起。

接下来的示例代码展示了如何使用 TypeScript 定义 redux store:

import { createStore } from 'redux';
import rootReducer from './reducers';

export interface AppState {
  todos: Todo[];
  visibilityFilter: string;
}

const store = createStore(rootReducer);

export default store;

在这段代码中,我们定义了应用程序的状态类型为 AppState,包含了 todos 和 visibilityFilter 两个属性。这使得我们在开发 Redux 应用程序时可以使用 TypeScript 的类型系统,确保我们的代码是类型安全的。

总结

Redux 和 React + TypeScript 的结合非常适合构建复杂的前端应用程序。在本文中,我们讨论了 Redux 的基础概念、React 和 Redux 的结合以及如何使用 TypeScript 编写 Redux 应用程序。

这篇文章只是最基本的入门教程,还有很多需要继续深入学习的地方。如果你想要深入了解 Redux 和 TypeScript,可以查看官方文档或参加相关的课程。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65937f41eb4cecbf2d837496


纠错反馈