Next.js 应用中结合 Redux 的使用教程

阅读时长 7 分钟读完

介绍

Next.js 是一个开源的 React 框架,能够帮助开发者快速的构建 SSR(server-side rendering)应用,并且还包含了大量的开箱即用的功能,例如路由、CSS 模块化、静态文件服务等等。

而 Redux 则是一个流行的状态管理器,用于在应用内存储和管理全局状态。Redux 使得状态的管理非常容易,并且可以在整个应用中共享状态,使得开发者更容易编写可维护的应用。

在 Next.js 应用中,结合 Redux 一起使用,能够帮助我们更好的管理应用中的状态,并且在应用进行 SSR 时,也能够正确的传递状态给客户端,保证应用的可靠性和性能。

本篇文章将会介绍如何在 Next.js 应用中,结合 Redux 来管理全局状态。

准备工作

在开始前,我们需要确保已经安装了以下依赖:

  • Next.js: npm install next
  • React 和 React DOM: npm install react react-dom
  • Redux: npm install redux react-redux
  • Redux Toolkit: npm install @reduxjs/toolkit

创建 Redux Store

在使用 Redux 之前,我们需要先创建一个 Redux store,并在 store 中添加一些 reducers。

安装依赖包

首先,我们需要安装 reduxreact-redux 这两个库。

同时,我们还可以使用 @reduxjs/toolkit 库,它简化了 Redux 的常用操作,例如创建 store、reducers 和 action 等。

创建 reducer 函数

在 Redux 中,reducer 是用来处理和管理 state 的函数。在创建 reducer 函数之前,我们需要定义一下 state 的初始值和 action 的类型。

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

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

在上面的代码中,我们定义了一个叫做 counterReducer 的 reducer 函数,它接受一个 state 和一个 action,根据不同的 action 类型,对应的更新 state。

创建 store

在 Redux 中,store 用来存储应用中的状态,并提供一些方法用来获取、更新状态。

在上面的代码中,我们使用了 configureStore 函数来创建了一个 store,同时指定了我们之前创建好的 counterReducer 函数作为 reducer。这样,我们就完成了 store 的创建。

在 Next.js 中使用 Redux

在上面,我们已经成功的创建了一个 Redux store,现在我们需要在 Next.js 应用中使用这个 store。我们需要做的有以下几步:

  1. 在 _app.js 中添加 Provider
  2. 使用 getStaticProps 和 getServerSideProps 获取数据
  3. 在组件中使用 useSelector 和 useDispatch

在 _app.js 中添加 Provider

在 Next.js 中,_app.js 是应用的根组件,渲染所有的页面。我们可以在 _app.js 中添加一个 Provider 组件,用来将 store 注入到整个应用中。

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

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

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

在上面的代码中,我们将 store 作为 props 传递给了 Provider 组件,并将 Provider 组件嵌套在 App 组件中。

使用 getStaticProps 和 getServerSideProps 获取数据

在 Next.js 中,由于应用可能会进行 SSR,因此我们需要在获取数据时,使用不同的方法。getStaticProps 和 getServerSideProps 分别用来在静态页面生成时获取数据,和在每次请求时获取数据。

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

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

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

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

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

在上面的代码中,我们首先使用了 useSelector 和 useDispatch 钩子来分别获取和更新 store 中的状态。

接着,我们在 Home 组件的 getServerSideProps 方法中返回了一个包含 data 数据的 props 对象。

在组件中使用 useSelector 和 useDispatch

在 Home 组件中,我们使用了 useSelector 和 useDispatch 钩子来分别获取和更新 store 中的状态。

useSelector 函数用来选择我们想要的状态,它返回一个函数,这个函数接受整个 store,并从中提取出我们需要的状态。

useDispatch 函数则用来分发 action,它接受一个 action,然后将这个 action 发送给 store,使得 store 更新自己的状态。

总结

在本篇文章中,我们介绍了如何在 Next.js 应用中,结合 Redux 来管理全局状态。我们首先创建了一个 Redux store,并添加了一些 reducers。接着,我们在 _app.js 中使用 Provider 将 store 注入到整个应用中。最后,在组件中使用了 useSelector 和 useDispatch 钩子来获取和更新 store 中的状态,使得应用能够更好的管理和共享状态。

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

纠错
反馈