当前位置: 首页 > news >正文

第一章 react redux的学习,单个reducer

redux系列文章目录

第二章 简单学习redux,多个reducer

第三章 redux和react-redux,@reduxjs/toolkit依赖结合使用

第四章 react-redux,@reduxjs/toolkit依赖,学习

第五章 两张图告诉你redux常使用的api有哪些

一 什么redux?

redux是一个专门用于做状态管理的JS库(不是react插件库)。它可以用在react, angular, vue等项目中, 但基本与react配合使用。集中式管理react应用中多个组件共享的状

简单来说,就是存储页面的状态值的一个库,需要的时候取出来就行

二 redux的工作原理

在这里插入图片描述

Action‌

Action是一个描述发生了什么的普通JavaScript对象。当用户在界面上执行某个操作时(如点击按钮),会派发一个action。Action必须有一个type属性来标识其类型。

Reducer‌

Reducer是一个纯函数,接收先前的状态和一个action,返回新的状态。Redux要求所有的状态更新逻辑都写在reducer中,确保状态的更新是可预测和确定的。

Store‌

Store是将所有状态保存为一个对象树(state tree)的地方。它提供几个方法,如dispatch(action)来触发action,getState()来获取当前状态,subscribe(listener)来注册监听器等。

三 使用redux

准备工作

1.一个react项目环境下,下载依赖

npm i redux

2.新增src/redux文件夹;
新增 src/redux/store.js文件和src/redux/reducers.js文件;
新增src/pages/counter/index.js文件

代码

src/redux/reducers.js文件

function counterReducer(state = 0, action) {
    switch (action.type) {
        case 'INCREMENT':
            return state + 1;
        case 'DECREMENT':
            return state - 1;
        default:
            return state;
    }
}   

export default counterReducer;

src/redux/store.js文件

import {createStore} from 'redux';
import counterReducer from './reducer'
let store = createStore(counterReducer);

export default store

src/pages/counter.js文件

import React, { useState } from 'react'
import store from '../../redux/store'
export default function Count() {
    const [count, setCount] = useState(0)
    store.subscribe(() => {
        console.log("监听其变化----", store.getState())
        setCount(store.getState())
    })
    return (
        <div>
            当前count:{count}
            <br />
            <button onClick={() => {
                store.dispatch({ type: 'INCREMENT' })
            }}>新增count</button>
            &nbsp;
            <button onClick={() => {
                store.dispatch({ type: 'DECREMENT' })
            }}>减少count</button>
        </div>
    )
}

效果

redux 的使用效果

相关文章:

  • macOS Chrome - 打开开发者工具,设置 Local storage
  • nginx 代理 https 接口
  • Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程
  • Corrective Retrieval Augmented Generation
  • GitHub 趋势日报 (2025年04月04日)
  • 【区块链安全 | 第二十九篇】合约(三)
  • 需求的图形化分析-状态转换图
  • 【C++算法】51.链表_两数相加
  • 【论文粗读】Multi-scale Neighbourhood Feature Interaction Network
  • ruby高级语法
  • Linux命令学习
  • export default function?在react中在前面还是后面呢?
  • node.js之path常用方法
  • 模仿axios的封装效果来封装fetch,实现baseurl超时等
  • 批量将图片转换为 jpg/png/Word/PDF/Excel 等其它格式
  • 【ROS 通信】Services 服务通信
  • pinia中不定义state和action也能正常使用属性和方法
  • [Effective C++]条款28:避免返回handles指向对象内部成分
  • AI 智能外呼系统的智能体现
  • Python语言的网络编程
  • 江苏中盛建设集团网站/重庆seo排名技术
  • 深圳网站制作07551/免费外国网站浏览器
  • 售后服务方案 网站建设/seo内容优化
  • 快速搭建网站工具/广州网站排名专业乐云seo
  • 酒店网站建站/怎么推广一个平台
  • mp6 wordpress 静态/宁波正规优化seo价格