在Next.js中引入Redux|第一篇

前言

春节在家里做了一点关于Next.js的工作,由于知识点比较多,空余写作时间比较零碎,我决定采用系列文的形式对所有知识点进行回顾总结,争取一篇文章讲明一个点,本篇要讲的是如何通过React高阶组件在Next.js项目中引入Redux

背景

背景没什么好说的,Next.js作为React的一个前后端同构框架,在应用中引入Redux是一个常见的需求(阅读本文前应对Next.js前后端渲染的流程以及Redux基本用法有一定了解),使用常规方法引入Redux会产生一个问题:当服务端接收到请求后,Next会先后在服务端、前端各生成一个store,由于两个store没有进行数据同步,前端渲染时会报错。

解决思路

在服务端渲染的过程中完成store的初始化,并将初始化的store返回前端,供前端使用,即可保证前后端store数据一致性。 工作流程如下:

前端 服务器 请求 完成store初始化 及页面渲染 初始化后的store与HTML 此处渲染的作用是构 建JS层面的内容, 比如说:虚拟DOM 前端 服务器

由于store不能被序列化,HTML不能直接携带store返回前端,只能先取出初始化后的store的state,随HTML回传到前端后,前端再利用此state创建store,以此保证前后端store一致性。具体的实现会在代码中进行讲解。

实现

首先安装两个包,redux和react-redux
redux就是redux本体
react-redux是redux的官方react连接库

代码
store.js

创建一个createMyStore模块,此模块的作用是创建store,用户传入一个InitialState,它返回一个store

import {
    createStore } from 'redux'

const ADD = 'add';

const defaultState = {
   
    counter: 28
}

function reducer(preState, action) {
   
    switch (action.type) {
   
        case ADD:
            return {
   
                ...preState,
                counter: preState.counter+
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你的问题。 首先,需要在项目安装 redux 和 @reduxjs/toolkit: ``` npm install redux @reduxjs/toolkit ``` 接着,创建一个 reducer 文件(比如 counterSlice.js),定义一个初始状态和一个 reducer 函数: ``` import { createSlice } from '@reduxjs/toolkit' const counterSlice = createSlice({ name: 'counter', initialState: { value: 0 }, reducers: { increment: (state) => { state.value++ }, decrement: (state) => { state.value-- }, }, }) export const { increment, decrement } = counterSlice.actions export default counterSlice.reducer ``` 在 App.js 使用这个计数器: ``` import React from 'react' import { useSelector, useDispatch } from 'react-redux' import { increment, decrement } from './counterSlice' function App() { const count = useSelector((state) => state.counter.value) const dispatch = useDispatch() return ( <div> <h1>Counter: {count}</h1> <button onClick={() => dispatch(increment())}>+</button> <button onClick={() => dispatch(decrement())}>-</button> </div> ) } export default App ``` 最后,需要在应用程序的顶层使用 Redux 的 Provider 组件,以便将 store 注入到组件树: ``` import React from 'react' import ReactDOM from 'react-dom' import { Provider } from 'react-redux' import { configureStore } from '@reduxjs/toolkit' import counterReducer from './counterSlice' import App from './App' const store = configureStore({ reducer: { counter: counterReducer, }, }) ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') ) ``` 这样就完成了一个使用 Redux Toolkit 开发的计数器应用。希望我的回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值