Redux 中使用 TypeScript:实战教程

阅读时长 11 分钟读完

Redux 是一种用于 JavaScript 应用程序的可预测状态容器,它可以帮助你管理应用程序的状态,并使其易于调试和维护。而 TypeScript 是一个强类型的 JavaScript 超集,它可以使开发者在编写代码时发现错误,并提供更好的编辑器支持。将 Redux 和 TypeScript 结合使用,可以使代码更加稳健和可维护。

本教程将带领你创建一个使用 Redux 和 TypeScript 的实时搜索应用程序。在这个过程中,你将学习如何配置 Redux 和 TypeScript,如何编写符合类型约束的 Redux reducers 和 actions,以及如何在 React 中使用这些 reducers 和 actions。

1. 设置项目环境

在开始之前,我们需要设置项目环境。我们将使用 create-react-app 来快速搭建项目。

首先,打开终端并输入以下命令:

这个命令将使用 create-react-app 创建一个名为 redux-typescript-tutorial 的项目,并使用 TypeScript 作为模板。

等待命令完成后,进入项目文件夹:

2. 配置 Redux

我们将使用 reduxreact-redux 库来管理应用程序的状态。运行以下命令来安装它们:

接下来,我们需要创建一个 Redux store。在 src 文件夹下创建一个新文件夹 store。在这个文件夹下,创建一个新文件 index.ts。在这个文件中,我们将初始化 Redux store 并导出它。

我们这里使用 rootReducer 作为我们的应用程序的 reducer,下一步我们将创建它。

store 文件夹下,创建一个新文件夹 reducers。在这个文件夹下,创建一个新文件 index.ts。这个文件将包含我们的应用程序的 reducer。

我们现在已经初始化了 Redux store 并创建了一个根 reducer。接下来,我们将在 reducers 文件夹下添加一些 reducer。

reducers 文件夹下,创建一个新文件 search.ts。这个文件将包含我们的搜索 reducer。

-- -------------------- ---- -------
------ - ------- - ---- --------

--------- ----------- -
  ------ -------
-

----- ------------- ----------- - -
  ------ ---
--

----- -------------- -------------------- - ------ - ------------- ------- -- -
  ------ ------------- -
    ---- ---------------
      ------ -
        ---------
        ------ ---------------
      --
    --------
      ------ ------
  -
--

------ ------- --------------

在这个 reducer 中,我们定义了一个 SearchState 接口来描述应用程序的搜索状态,包含一个名为 query 的字符串属性。在 reducer 中,我们返回一个新的搜索状态对象,其中 query 属性设置为 action 的 payload 值。

接下来,我们需要将这个 reducer 添加到我们的根 reducer 中。回到 reducers/index.ts 文件,添加以下代码:

现在我们的根 reducer 包含了一个 search reducer。我们已经完成了 Redux 的配置。

3. 编写 actions

接下来,我们需要编写 actions,这些 actions 用于修改 Redux store 中的状态。我们使用 TypeScript 来确保我们的 actions 符合特定的类型模式。

store 文件夹下,创建一个新文件夹 actions。在这个文件夹下,创建一个新文件 search.ts。这个文件包含一些定义搜索 action 的 TypeScript 类型和创造这些 action 的函数。

-- -------------------- ---- -------
------ --------- ----------------- -
  ----- ---------------
  -------- -------
-

------ ---- ------------ - ------------------

------ -------- ------------------ -------- ----------------- -
  ------ -
    ----- ---------------
    -------- ------
  --
-

在这个文件中,我们定义了一个名为 UpdateQueryAction 的 TypeScript 接口,用于描述更新搜索查询的 action。我们还定义了一个 SearchAction 类型,它是定义在我们的应用程序中可以派发的所有 actions 的联合类型。最后,我们定义了一个名为 updateQuery 的函数,它返回一个 UpdateQueryAction 对象,用于将新的搜索查询更新到 Redux store 中。

现在我们已经完成了 actions 的编写。

4. 在 React 中使用 Redux

现在我们已经完成了 Redux 的配置和 actions 的编写,我们可以开始在 React 组件中使用 Redux 了。

src 文件夹下,创建一个新文件夹 components。在这个文件夹下,创建一个新文件 SearchInput.tsx。这个组件用于渲染一个包含搜索输入框的组件,并将用户输入的搜索查询更新到 Redux store 中。

-- -------------------- ---- -------
------ ------ - -------- - ---- --------
------ - ----------- - ---- --------------
------ - ----------- - ---- --------------------------

----- ------------ -------- - -- -- -
  ----- ------- --------- - -------------
  ----- -------- - --------------

  -------- ------------------- ------------------------------------ -
    -----------------------------
  -

  -------- -------------- -
    -----------------------------
  -

  ------ -
    -----
      ------ ----------- ------------- ----------------------- --
      ------- --------------------------------------
    ------
  --
--

------ ------- ------------

在组件中,我们使用 React.useState 以及 React.useDispatch hook 来更新组件的状态和发送更新 Redux store 的 action。我们为输入框添加了一个 onChange 事件处理程序来更新查询,并在 Search 按钮点击时调用 updateQuery action。

现在,我们已经完成了在 React 组件中使用 Redux 的全部配置。

5. 完整代码

下面是我们的完整代码,包含上面提到的所有文件和代码:

src/store/actions/search.ts

-- -------------------- ---- -------
------ --------- ----------------- -
  ----- ---------------
  -------- -------
-

------ ---- ------------ - ------------------

------ -------- ------------------ -------- ----------------- -
  ------ -
    ----- ---------------
    -------- ------
  --
-

src/store/reducers/search.ts

-- -------------------- ---- -------
------ - ------- - ---- --------

--------- ----------- -
  ------ -------
-

----- ------------- ----------- - -
  ------ ---
--

----- -------------- -------------------- - ------ - ------------- ------- -- -
  ------ ------------- -
    ---- ---------------
      ------ -
        ---------
        ------ ---------------
      --
    --------
      ------ ------
  -
--

------ ------- --------------

src/store/reducers/index.ts

src/store/index.ts

src/components/SearchInput.tsx

-- -------------------- ---- -------
------ ------ - -------- - ---- --------
------ - ----------- - ---- --------------
------ - ----------- - ---- --------------------------

----- ------------ -------- - -- -- -
  ----- ------- --------- - -------------
  ----- -------- - --------------

  -------- ------------------- ------------------------------------ -
    -----------------------------
  -

  -------- -------------- -
    -----------------------------
  -

  ------ -
    -----
      ------ ----------- ------------- ----------------------- --
      ------- --------------------------------------
    ------
  --
--

------ ------- ------------

6. 结论

在本教程中,我们学习了如何在 Redux 中使用 TypeScript,并使用一个实时搜索应用程序作为示例来演示如何编写类型安全的 reducers 和 actions。我们还了解了如何在 React 组件中使用 Redux,以及如何将用户输入更新到 Redux store 中。

通过将 Redux 和 TypeScript 结合使用,我们可以确保应用程序的状态始终符合类型约束,并且代码更加健壮和易于维护。我希望这个教程能够帮助你更好地理解如何在 TypeScript 中使用 Redux,以及如何将 Redux 和 TypeScript 结合使用来构建具有类型安全的 React 应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6714af9dad1e889fe21509c4

纠错
反馈