在 Next.js 中如何使用 Redux 进行状态管理

阅读时长 7 分钟读完

为了更好地管理应用程序中的状态,许多开发人员转向 Redux。Redux 是一种流行的 JavaScript 库,它可以与各种框架和库集成。在这里,我们将讨论如何将 Redux 结合 Next.js 使用。

安装 Redux 和相关依赖

在开始之前,需要安装一些依赖项:

这些依赖项的作用如下:

  • redux:Redux 库
  • react-redux:Redux 库的 React 绑定
  • next-redux-wrapper:这个库是一个简单的 Next.js 服务器端渲染解决方案

创建 Redux Store

首先,我们需要创建一个 Redux store,该 store 将在整个应用程序中用于存储状态。我们可以将其放在一个单独的文件中,例如 store.js

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

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

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

上述代码是非常简单的 Redux store,每次执行相应的 action 后,状态 count 都会相应地增加或减少。

创建 _app.js

接下来,我们需要为我们的 Next.js 应用程序创建一个 _app.js 文件。_app.js 是 Next.js 中的特殊文件,它是所有页面的公共父级组件。它可以用于在所有页面间共享状态和逻辑。

首先,在项目根目录下创建一个名为 _app.js 的文件并添加以下内容:

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

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

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

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

在这个文件中,我们首先引入 React 库、Provider 组件和 makeStore 函数。然后,我们定义了一个名为 MyApp 的函数组件,该组件接收 ComponentpageProps 作为 props。最后,我们将 Provider 组件封装在 MyApp 之外,这样所有的子组件都可以访问到 Redux store。

创建页面

现在,我们可以创建一个新页面来测试 Redux store。在我们的项目中,创建一个名为 index.js 的新页面,并包含以下代码:

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

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

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

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

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

在上述代码中,我们首先引入 connect 函数、mapStateToPropsmapDispatchToProps 函数。然后,我们定义了一个函数组件 Home,该组件显示当前状态中的 count 值,并包含两个按钮:分别触发 incrementdecrement 函数。这些函数会分别分派相应的 action,该 action 会更新状态值。

最后,我们使用 connect 函数将 Home 组件连接到 Redux store,使其可以访问 countincrement/decrement 函数。

运行应用程序

现在,我们已经完成了所有的代码,我们可以启动应用程序来查看状态管理是否正常。在终端中运行以下命令启动 Next.js 应用程序:

然后,打开您的浏览器并访问 http://localhost:3000/,即可看到渲染后的页面。每次单击 IncrementDecrement 按钮时,页面上的 Count 数字都将更新。

结论

在本文中,我们学习了如何在 Next.js 中使用 Redux 进行状态管理。Redux 可以帮助我们更好地组织和管理应用程序中的状态。通过创建 Redux store 和使用 connect 函数,我们可以轻松地将 Redux 集成到我们的 Next.js 应用程序中。

示例代码:

store.js

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

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

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

_app.js

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

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

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

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

index.js

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

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

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

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

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

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

纠错
反馈