首页
学习
活动
专区
圈层
工具
发布

前端基建规范参考

状态管理器优化和统一 # 3.1 优化状态管理 用react的context封装了一个简单的状态管理器,有完整的类型提升,支持在组件内和外部使用,也发布到?...api文件夹 │ │ └─index.ts # api函数封装 │ │ ├─types.ts # api的参数和响应类型 定义类型 // api/types.ts...函数库-通用方法抽离复用 把公司项目中常用的方法和hooks抽离出来组成函数库,方便在各个项目中使用,通过编写函数方法,写 jest 单元测试,也可以提升组内成员的整体水平。...当时组内前端不管是实习生还是正式成员都在参与函数库的建设,很多就有了 30+ 的函数和 hooks,还在不断的增加。 是用了dumi2来开发的函数库,可以看我的这篇文章?...【前端工程化】使用 dumi2 搭建 React 组件库和函数库详细教程 # 八.

67030

「React进阶必备」:深入理解useSyncExternalStore - 从原理到实战的完整指南

不是因为它不重要,而是因为大多数开发者在日常开发中很少遇到需要它的场景。 但是,当你真正需要它的时候,它会成为你的救星。更重要的是,理解这个Hook能让你对React的工作原理有更深层的认识。...今天我们就来深入探讨这个Hook:它解决了什么问题,如何使用,以及为什么掌握它对React开发者很有价值。...它只会在特定的"信号"触发时才重新渲染组件: setState调用 useReducer的dispatch Context值变化 父组件重新渲染 对于外部数据(不受React状态管理的数据),React...useSyncExternalStore详解:桥接外部世界与React 基本API和工作原理 const data = useSyncExternalStore(subscribe, getSnapshot...Context API 复杂度:useSyncExternalStore实现更简单,不需要Provider包装 性能:更精确的更新控制,只有真正使用数据的组件才会重新渲染 灵活性:可以轻松集成非React

27010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    供应链系统前端安全防护:XSS、CSRF与JWT攻防实战

    考虑到系统的敏感性和复杂性,我决定引入AI编程助手(主要使用GitHub Copilot和ChatGPT)来协助完成安全防护工作,重点解决XSS、CSRF和JWT安全这三大前端安全挑战。...我向ChatGPT咨询了现代前端开发中的XSS最佳防护实践,它提供了基于React环境的综合防护方案,并解释了每种措施的有效性和局限性。...策略基于AI建议,我实现了上下文相关的输出编码:// 输出编码函数 - 由AI提供优化建议export const encodeOutput = (data, context = 'html') =>...我的目标是构建多层CSRF防护体系。我向AI咨询了现代CSRF防护的最佳实践,它提供了基于Token验证和SameSite Cookie的综合方案,并解释了双重提交Cookie模式的工作原理。...: 包含用户ID、角色等信息的对象token: 需要验证或解码的JWT字符串5.3 JWT安全存储与传输基于AI建议,实现了安全的JWT存储方案:// JWT安全存储Hook - React Context

    47520

    super(props) 真的那么重要吗?

    讽刺的是,我想用一些关于 class 组件的有趣故事来开始这篇文章。你觉得如何? 本文中这些坑对于你正常使用 React 并不是很重要。...不过还是让我们回到上面这个例子,这次只使用ES2015的特性: ? 为什么我们要调用super? 可以调用它吗? 如果必须要调用,不传递prop参数会发生什么? 还有其他参数吗?...如果这种情况发生在从构造函数调用的某个方法中,可能会给调试工作带来很大的麻烦。 这就是为什么我建议总是调用 super(props) ,即使在没有必要的情况之下: ?...你可能已经注意到,当你在类中使用Context API时(无论是旧版的 contextTypes 或在 React 16.6中新添加的 contextType API),context 会作为第二个参数传递给构造函数...那么为什么我们不写成 super(props, context) 呢? 我们当然可以这样做,但是使用context的频率比较低,所以这个坑并没有那么多影响。

    1.7K50

    我在项目里踩过的坑

    我刚工作时的懵逼时刻 那时候我对 useState 的理解就是:"就是个变量呗,用 setCount 改改值。"...我就很纳闷啊,为什么我改了还是 0?我甚至问过 ChatGPT(那时候还没有,我查的文档)。文档里说"状态更新是异步的",我当时理解得一知半解——"异步","什么鬼?为什么要异步?"...我就很郁闷啊,明明设置了啊,为什么没有? 真相是:我多次调用 setXxx,React 会合并这些更新。但每次都用的是同一个快照的旧值。...之后重新渲染时,它就不会再调用这个函数了。 这叫"懒初始化"。看起来简单,但对性能的影响能很显著。 真正的高手知道什么时候不用 useState 我刚工作时,什么东西都想放在 state 里。...所以如果你现在写的代码不够完美,项目里还有各种 setState 的问题,这很正常。关键是要去理解——为什么会这样?为什么 React 要异步更新?为什么不能直接改对象?

    24510

    前端性能优化实用方案(五):Vue和React的渲染性能优化

    5.1 React相关技术栈优化React提供了丰富的性能优化手段,开发者可以根据具体场景选择合适的优化策略。...5.1.1 React.memo 和 useMemo在实际项目中,组件的不必要重渲染往往是性能瓶颈的主要原因。React.memo可以帮我们避免这个问题,而useMemo则能缓存复杂的计算结果。...用户可能永远不会访问某个页面,那为什么要在初始加载时就把它包含进来呢?5.2 Vue中v-show与v-if的选择这是Vue开发中经常遇到的选择题。...如果不设置这个值,缓存会无限增长,最终导致内存泄漏。5.5 请求粒度优化很多时候,性能问题不在渲染本身,而在于数据请求的粒度不合理。...小结Vue和React的渲染性能优化其实没有什么神秘的技巧,关键是要理解框架的工作原理:React优化:合理使用memo、useMemo、useCallback,配合虚拟化技术处理大量数据条件渲染:频繁切换用

    37120

    我在大型项目中发现的真相

    我就在想:为什么一个简单的 UI 交互,要走这么复杂的流程? 后来我翻了翻项目代码,发现这不是个案。 真实的数据 我问过一个做中后台的哥们儿,他们项目 Redux 代码 3000+ 行。...我说,这里面有多少真的需要全局? 他想了想说:"也就 30%?其他的都是……下拉菜单、表单、弹窗这些东西。" 我又看了另一个项目。...就是 JavaScript 对象和函数。简洁很多。 那 Redux 现在还有人用吗? 有。但用的场景越来越具体了。...第 4 层:服务端数据 → React Query 这是最重要的一点。...真的是 App 全局共享的状态,而且不会频繁变化? → 用 Context + useState,或者 Zustand 4. 这是来自服务器的数据,而且会变化?

    18510

    如何掌握高级react设计模式: Render Props【译】

    点击此处查看第1部分 在第2部分中,我们使用新的 Context API 为第1部分的限制提供了优雅且可读的解决方案。...并且为了真正掌握它是如何工作的,我们需要深入了解顶级 React API 以及我们编写的 JSX 代码如何转换为 javascript。...然而,在下一个例子中,我们将它作为函数传递并将其放在 'div' 中,但这次是调用函数来实现完全相同的结果。 Render Props 为什么这很重要?...让我们回到 Stepper 组件,看看如何利用这种设计模式(我已经删除了所有 context 样板并将 state 添加回 stepper 组件)。 ?...它本质上给了我们与 context API 相同的 props 曝露,我们不必手动将 props 传递给每个子项。 这种对组件设计的简单调整解决了我们之前提到的所有问题。 ?

    1.8K30

    浏览器常见面试题及答案实操续篇之深度解析与典型题型汇总

    懒加载组件封装方法图片懒加载是前端性能优化的重要手段,以下是一个基于Intersection Observer API的懒加载组件封装实现:class LazyLoad { constructor(options...防抖与节流函数封装在处理高频触发事件时,防抖(Debounce)和节流(Throttle)是常用的优化手段:// 防抖函数:延迟执行,重复触发则重置计时器export function debounce...timer) { fn.apply(context, args); } // 清除之前的计时器 if (timer) clearTimeout(timer);...immediate) { fn.apply(context, args); } timer = null; }, delay); };}// 节流函数:固定间隔执行一次...封装一个通用的模态框组件以下是一个基于React的通用模态框组件封装示例:import React, { useState, useEffect } from 'react';import PropTypes

    25610

    从一个需求来讲前端代码设计

    这是一个很常见的需求,为什么我要把它单独拎出来讲,那是因为从这个小小的需求上,能看见一个人独有的思考,我们该如何从业务,时间,工作量上来平衡这个点,选择合适的方式来释放业务的能动性。...,把这个函数传递给添加(Modal)和删除(Modal),当你使用添加(Modal)按下确认之后,会将待添加的信息提交给服务端,服务端响应之后,调用一下这个函数,这个函数又会去获取一次新的列表,来局部刷新页面...在没有使用React或Vue这些框架的情况下,我们依然可以来添加一个小型基础的数据管理器,来完成这个操作。...我们可以定义两个方法pushItem和removeItem,来操作这些。...设计四(使用redux等数据流管理库) 目前的前端开发几乎已经无法告别React,Vue等现代JS Web框架,于是我们需要添加一个类似redux的数据流管理库,有了数据流管理库,再配合上React的优化

    84920

    如何掌握高级react设计模式: Render Props【译】

    点击此处查看第1部分 在第2部分中,我们使用新的 Context API 为第1部分的限制提供了优雅且可读的解决方案。...并且为了真正掌握它是如何工作的,我们需要深入了解顶级 React API 以及我们编写的 JSX 代码如何转换为 javascript。...让我们回到 Stepper 组件,看看如何利用这种设计模式(我已经删除了所有 context 样板并将 state 添加回 stepper 组件)。 ...它本质上给了我们与 context API 相同的 props 曝露,我们不必手动将 props 传递给每个子项。 这种对组件设计的简单调整解决了我们之前提到的所有问题。...这对我来说很可读; 让我们想想发生了什么。我们只是添加与子项相同效果的函数来代替添加 render 函数。

    1.3K20

    【React Conf 2018 回顾】React 的今天和明天 II —— React Hooks 提案

    我在 React Team 工作,这是我第一次参加 React 大会。...所以我们要在 React 里面重新把 mixins 添加回来吗?(对 ... 不...)对了,不,不,我们不会添加 mixins。我的意思是之前使用mixins 的代码并不是无法使用了。...本提案是严格添加性的、可选择的而且增加了一些新的 API 来帮助我们解决这些问题。并且我们希望听到你们对本提案的反馈,这也是为什么我们在今天发布本提案的原因。...可能你们最熟悉的用来消费 context,尤其是消费多个 context 的 API 就是 render prop API。就像这样写。我往下滚动到这里。...但是最后,我想讲讲一些我个人的观点。我从四年前学习 React。我遇到的第一个问题就是为什么要使用 JSX。 嗯,我第二个问题是 React 的 Logo 到底有什么含义。

    3.3K30

    React Hooks 快速入门与开发体验(一)

    Vue 3 推出 Composition API 的时候,看到一些表示这和 React Hooks 很像的评论。...那什么是 React Hook 呢?官方的介绍如下: Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。...第一条说明官方并不强制要求使用 React Hook。第二条则是说明,使用它不会影响旧版代码,确保存量项目代码的正常工作。 至于支持 Hook 的 React 版本,大约发布于2018年底。...到本文的2021年初算来,差不多已经过去两年时间了。 不过需要注意 React Hook 的使用规则: 只能在 函数最外层 调用 Hook。 只能在 React 的函数组件 中调用 Hook。...改进 为什么要这样设计呢?官方给出了一个例子,就是根据 props 参数订阅数据源时,如果 props 参数发生变化,都需要清理旧订阅注册新订阅。

    1.3K30

    「React组件通信全攻略」:8种实用模式,让你的组件优雅对话

    这些看似简单的交互,背后都涉及组件间的通信问题。 今天我们就来系统梳理React中8种常用的组件通信模式,从最基础的props传递到高级的自定义Hook,让你的组件能够"优雅对话"。 1....回调函数:子组件向父组件汇报 基础用法 当子组件需要告诉父组件"我做了什么事"时,回调函数就派上用场了: // 搜索组件 function SearchBox({ onSearch }) { const...Context:跨层级的全局通信 创建Context 当数据需要在多个层级间传递时,Context可以避免props层层传递的麻烦: // 创建主题Context const ThemeContext...插件化架构 性能优化小贴士 避免不必要的重渲染 // ✅ 使用React.memo优化子组件 const ProductCard = React.memo(({ product, onAddToCart...React组件通信的核心是选择合适的工具解决具体问题: 简单优先 - 能用props解决的不要用Context,能用Context解决的不要用全局状态库 性能考虑 - 频繁变化的数据避免放在Context

    33110

    精读《React — 5 Things That Might Surprise You》

    点击demo ❝在函数式组件中我们可以使用ref存储静态变量 ❞ 3. React 可以强制重新挂载一个组件 写入DOM的成本非常高。这就是为什么我们通常不想重新mount 组件,除非绝对必要。...不像你期望的那样工作 ❝Context用来解决 “prop drilling” 问题,但是它会带来性能问题,(context value如果是对象)其中一个属性状态发生变化,会导致其它订阅Context...的组件都发生更新,所以context一般用于不频繁更新的场景比如(locale和theme) ❞ use-context-selector可以解决context带来的性能问题 频繁更新状态(状态共享)的...React 有一个完整的 API 来处理 children 属性 ❝React为Children属性提供了一系列API ❞ React.Children.toArray(children) // If...(children) ❝如果你需要在您的组件中强制执行单个子项(我最近注意到 formik 这样做),你可以简单地在您的组件中包含以下行,React 将为你运行检查和错误处理: ❞ React.Children.only

    1.5K20

    React 19 小白高薪 ,入门到进阶2025学习资料

    一、高效学习第一步:建立版本迭代的宏观视角在学习具体API之前,最关键的是理解React19的“定位”。它并非一次颠覆性的重构,而是对现有开发模式的一次重大增强和体验优化。...为什么重要:​这对于服务端渲染应用和元数据框架至关重要。它解决了以往需要复杂技巧才能在组件内动态设置页面标题或元数据的难题,让SEO优化更自然。学习关键:​理解其如何在客户端和服务端无缝工作。...新Hooks:use与useOptimisticuseHook:​一个更强大的Hook,可以读取上下文(Context)之外的值,比如在渲染过程中读取Promise或context。...高效技巧:​将Actions​作为你学习的第一个也是最重要的突破口。因为它代表了React未来处理副作用的思维方式。围绕它来学习useOptimistic和其他相关API,可以形成知识闭环。...即使不立即写代码,你也可以通过以下方式深化理解:对比学习法:​对于每个新特性,思考“在React18或更早版本中,我需要如何实现相同功能?React19的新方法带来了哪些好处?”

    31510
    领券