【青训营】-🐳React实战(下)

简介: 【青训营】-🐳React实战(下)

2d3ef3f769af4471b616ab79f81461a7_tplv-k3u1fbpfcp-zoom-crop-mark_3024_3024_3024_1702.gif

前言


到目前为止,笔者一直都是用Vue框架开发项目,由于最近参加了字节青训营嘛,课程中学习的框架是React,索性跟着老师来学习一下React,写了这样一篇笔记,如果有和我一样一直在用Vue而没有接触过React的同学欢迎来阅读哇~👏


Redux


Redux是什么?


Redux是一个全局状态管理中心,里面保存了状态和状态的管理逻辑 随着组件的逻辑越来越复杂,我们需要专门引入一层来做状态管理相关的事情,Redux就是这样的一层,类似于Vuex。 看下面这个例子:


7a1085022af0453aa5f17d9d42ead6e1_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


通过点击事件触发状态的更新。


Redux中的数据流


df4a40a8ced64dcea324a05e755ef9c3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Redux会把Action和State这两部分的工作负责起来,组件需要修改State的时候可以调用Redux中提供的Action,通过Action更改State。


什么时候使用Redux?


当应用足够大,较复杂的时候需要共享状态或者组件需要频繁进行状态共享适合用Redux。


Redux中的术语


Store:存储全局状态


81e4216538434f60b74fdaf2384440eb_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Action:描述状态发生的变化


30475702488e479f875af5330d98a6a4_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Dispatch:发送一个Action


637e5e8eb8ea4668913ffedbdfdd1fc1_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Reducer


根据当前应用状态,和接受的action,计算新的状态。


3bd43bf5811f4e318dc36262cbdb4a5f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Redux更新状态的具体流程可见下面动图:


9c7d02a706fc4c2db4fce4d360555962_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


Redux Toolkit(RTK)


RTK是基于Redux的上层封装库,基于常见业务场景,提供了更加简洁的API,简化Redux的使用复杂度。


创建store

80a0c50c6b7b47cdb8d2068a4c23a10c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


创建slice


一个slice模块,包含了管理一个子状态所需的所有逻辑(state、actions、reducer等)


4e06582d95734930ab7a3b405c5d6ec0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


slice实例


29cf4c54184a48f5809694dbd87ddc26_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


reducer必须是纯函数


fcce951fdb8c4d2b9e5183b5642cb14e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


slice使用


获取state

bcc170e14cb44bada3d7ae467aa45b72_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


修改state


b029c437a7634b79b9ac5f90cb8421ce_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


store中的状态放在哪里?


2804a03f8d0c44d1ae9982431aef89d8_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


抽象带来的复杂度和收益不成正比:


  1. 原本可以直接使用的API数据结构需要额外经过2层转换
  2. JS模拟数据库表管理的复杂性,并没有真正的数据库工具做管理


服务端 状态


大部分场景下,API数据是不需要进行扁平化处理的。服务端数据的同步问题,应该交由服务端处理,而不是在前端重复后端工作。API数据的缓存问题,应该由专门的解决方案解决。


其他状态管理方案


  • RTK Query
  • Recoil
  • Context + Hooks


最后


⚽本文介绍了redux的概念和使用及相关知识~

⚾如果你对这篇文章感兴趣欢迎点赞关注+收藏,更多精彩知识正在等你!😘

相关文章
|
前端开发 API 数据库
React Server Components 实战:解锁高效渲染新姿势
React Server Components 实战:解锁高效渲染新姿势
589 81
|
缓存 前端开发 安全
解锁下一代 React:Server Components 实战指南
解锁下一代 React:Server Components 实战指南
444 84
|
前端开发
React Hooks数据获取:避免内存泄漏的实战指南
React Hooks数据获取:避免内存泄漏的实战指南
|
人工智能 自然语言处理 前端开发
让AI学会"边做边想":ReAct的实战指南
还在为AI的「知其然不知其所以然」而烦恼?ReAct技术让AI不仅会思考,更会行动!通过模拟人类的思考-行动-观察循环,让AI从书呆子变身为真正的问题解决专家。几行代码就能构建智能Agent,告别AI幻觉,拥抱可追溯的推理过程!
1359 7
|
前端开发 数据可视化 测试技术
React音频播放列表组件开发实战:常见问题与避坑指南
本文介绍了构建React音频播放列表组件的核心架构与常见问题解决方案。通过管理播放状态、列表索引和音频进度,结合异步控制、状态清理、节流优化等技术,确保流畅的用户体验。针对移动端兼容性、内存泄漏、列表渲染性能等问题提供了具体修复方案,并分享了自定义Hook封装、可视化音频波形等进阶实践。最后,总结了性能优化法则和测试关键点,帮助开发者打造生产级可靠的音频播放组件。
489 18
|
Web App开发 移动开发 前端开发
React 视频播放器样式自定义实战指南
本文详细介绍了如何在React项目中实现视频播放器的样式自定义,涵盖HTML5 `<video>`标签的基础知识、CSS样式定制技巧及常见问题解决方案。针对全屏模式样式失效、移动端触摸事件冲突和进度条样式定制等问题提供了具体代码示例。同时,探讨了视频预加载策略和内存优化方法,并推荐了几款调试工具,帮助开发者提升用户体验和应用性能。
597 6
|
前端开发 数据管理 编译器
引领前端未来:React 19的重大更新与实战指南🚀
React 19 即将发布,带来一系列革命性的新功能,旨在简化开发过程并显著提升性能。本文介绍了 React 19 的核心功能,如自动优化重新渲染的 React 编译器、加速初始加载的服务器组件、简化表单处理的 Actions、无缝集成的 Web 组件,以及文档元数据的直接管理。这些新功能通过自动化、优化和增强用户体验,帮助开发者构建更高效的 Web 应用程序。
1104 1
引领前端未来:React 19的重大更新与实战指南🚀
|
前端开发
React技术栈-react使用的Ajax请求库实战案例
这篇文章介绍了在React应用中使用Axios和Fetch库进行Ajax请求的实战案例,展示了如何通过这些库发送GET和POST请求,并处理响应和错误。
329 10
React技术栈-react使用的Ajax请求库实战案例
|
移动开发 前端开发 JavaScript
React 表单验证实战
【10月更文挑战第25天】本文介绍了 React 表单验证的常见方法,包括原生 HTML5 验证、自定义验证逻辑和第三方库(如 Formik 和 Yup)的使用。通过具体代码示例,详细讲解了每种方法的实现步骤,并探讨了常见问题和易错点及其解决方法。旨在帮助开发者提高表单验证的有效性和安全性。
528 10
|
前端开发 JavaScript 测试技术
构建响应式Web应用程序:React实战指南
【10月更文挑战第9天】构建响应式Web应用程序:React实战指南