Redux与React环境准备以及实现counter(及传参)

news/2024/7/15 18:07:21 标签: react.js, 前端, 前端框架

环境说明:

一:说明
在React中使用redux,官方要求安装两个其他插件:Redux Toolkit和react-redux
1. Redux ToolKit(RTK) - 官方推荐编写Redux逻辑的方式,是一套工具的集合集,简化书写方式
(简化store的配置方式 内置immer支持可变式状态修改 内置thunk更好的异步创建)

2. react-redux - 用来链接Redux和React组件的中间件
        ----------> 获取状态
(Redux react-redux React组件)
        <--------- 更新状态


二:配置基础环境
1. 使用CRA快速创建React项目
npx create-react-app react-redux

2. 安装配套工具
npm i @reduxjs/toolkit react-redux

3. 启动项目
npm run start

三:创建store文件夹
在src下创建store文件夹,并在store文件夹下创建index.js文件和modules文件夹,modules文件夹下创建如counter.js文件,图片如下所示:

创建store文件夹

实现counter(及传参)

1. 在counterStore.js编写如下代码:
import { createSlice } from '@reduxjs/toolkit'

const counterStore = createSlice({
    name: 'counter',
    // 初始化state
    initialState: {
        count: 0
    },
    // 修改状态的方法 同步方法 支持直接修改
    reducers: {
        increment(state) {
            state.count++
        },
        decrement(state) {
            state.count--
        },
        incrementToTen(state, action) {
            console.log(action.payload); // 外层传的什么数据结构这里就是什么数据结构
            state.count += action.payload.number;
        }
    }
})

// 解构出来actionCreater函数
const {increment, decrement, incrementToTen} = counterStore.actions;
// 获取reducer
const reducer = counterStore.reducer;

// 以按需导出的方式导出actionCreater
export {increment, decrement, incrementToTen}

// 以默认导出的方式导出reducer
export default reducer;

2. 在store文件夹下index.js编写代码如下
import { configureStore } from '@reduxjs/toolkit'
import counterReducer from './modules/counterStore';

const store = configureStore({
    reducer: {
        counter: counterReducer
    }
})

export default store


3. 在组件内应用
import { useDispatch, useSelector } from 'react-redux';
import { increment, decrement, incrementToTen } from './store/modules/counterStore';

function App() {
  const { count } = useSelector(state => state.counter) // 根据第二步命名进行解构(counter)
  const dispatch = useDispatch();

  const handleIncrement = () => {
    dispatch(increment())
  }

  const handleDecrement = () => {
    dispatch(decrement())
  }

  const handleIncrementToTen = () => {
    dispatch(incrementToTen({number: 10}));
  }

  return (
    <div className="App">
      {count}
      <button onClick={handleIncrement}>增加</button>
      <button onClick={handleDecrement}>减小</button>
      <button onClick={handleIncrementToTen}>增加按钮传参,默认加10</button>
    </div>
  );
}

export default App;






总结:
1. 组件中使用哪个hook函数获取store中的数据? useSelector
2. 组件中使用哪个hook函数获取dispatch方法?  useDispatch
3. 如何得到要提交action对象? 执行store模块中导出的actionCreater方法


http://www.niftyadmin.cn/n/5279744.html

相关文章

《漫画算法》笔记——给定数,求删除k个数字后的最小值

/*** 题目&#xff1a;给定一个数&#xff0c;求 删除k个数字后的最小值* 思路&#xff1a;考虑 “如何删除一个数字&#xff0c;得到最小值”&#xff0c;* 不难想到&#xff0c;应该优先删除“靠前&#xff0c;值大”的数字&#xff0c;* 观察到&#xff1a;如果一个数字大于…

中小型教育网络安全解决方案

热门IT技术视频教程&#xff1a;https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 一、中小型教育网络的安全现状及挑战 当前&#xff0c;校园网的安全形势非常严峻&#xff0c;大量的垃圾邮件、黑客攻击、病毒蠕虫等困扰着管理者。而且这些作…

urllib.error.URLError: <urlopen error [Errno 111] Connection refused>

sudo gedit /etc/hosts # 这里没有用终端修改的方式&#xff0c;即sudo vi&#xff0c;而是用gedit打开了文档修改在任意一行添加 199.232.68.133 raw.githubusercontent.com安装mavlink报错&#xff1a;aurllib2.URLError: &#xff1c;urlopen error &#xff1c;urlopen…

stable diffusion工作原理

目录 序言stable diffusion能做什么扩散模型正向扩散逆向扩散 如何训练逆向扩散 Stable Diffusion模型潜在扩散模型变分自动编码器图像分辨率图像放大为什么潜在空间可能存在&#xff1f;在潜在空间中的逆向扩散什么是 VAE 文件&#xff1f; 条件化(conditioning)文本条件化&am…

js中的Array.from()和Array.of()方法的用法详情

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

功能强大的开源数据中台系统 DataCap 1.18.0 发布

推荐一套基于 SpringBoot 开发的简单、易用的开源权限管理平台&#xff0c;建议下载使用: https://github.com/devlive-community/authx 推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件&#xff1a;https://github.com/devlive-commun…

从0开始学Git指令

从0开始学Git指令 因为网上的git文章优劣难评&#xff0c;大部分没有实操展示&#xff0c;所以打算自己从头整理一份完整的git实战教程&#xff0c;希望对大家能够起到帮助&#xff01; 初始化一个Git仓库&#xff0c;使用git init命令。 添加文件到Git仓库&#xff0c;分两步…

【Java】 Java MySQL 实现读写分离方案

1. 背景 我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案, 其中一个是主库,负责写入数据,我们称之为:写库; 其它都是从库,负责读取数据,我们称之为:读库; 那么,对我们的要求是: 1、读库…