标签: React

42 个内容

笔记(31)

React 合成事件系统提供跨浏览器兼容性和性能优化,通过事件委托和优先级调度提升体验。React 17 将事件委托到 root 节点并移除事件池。合成事件与原生事件混用时需注意执行顺序和传播控制。针对高频事件,可使用被动监听器,并避免内存泄漏。性能敏感场景可考虑原生事件与 `requestAnimationFrame`。

Elliot Yang·
99 浏览

本文深入探讨了React中useEffect、useLayoutEffect、useDebugValue等非主流Hooks。强调useEffect的异步性,useLayoutEffect的同步陷阱,以及useDebugValue的调试价值。分析了并发模式和SSR场景下的Hook使用,并提供工程决策树和最佳实践。

Elliot Yang·
108 浏览

React 18引入并发模式,利用Fiber架构和优先级调度提升性能。Hooks解决了类组件的逻辑复用和生命周期管理难题。Diff算法通过Key优化列表渲染。JSX编译为`React.createElement`调用。最佳实践包括Suspense、性能监控和状态管理分层。架构设计强调不可变数据、副作用隔离和组件分层。

Elliot Yang·
155 浏览

`tabIndex`影响焦点控制与可访问性。浏览器通过焦点树、DOM顺序和`tabIndex`决定焦点顺序。`tabIndex`可强制聚焦、调整顺序或排除元素。实践中需关注动态内容焦点管理、可访问性增强。避免滥用`tabIndex>0`,利用React、Vue框架及axe-core等工具优化焦点管理,构建无障碍体系。

Elliot Yang·
128 浏览

本文深入剖析React事件处理、异步加载、Context管理、HOC和虚拟DOM等核心机制,并探讨了React 18的新特性,如Server Components和流式SSR。强调了性能优化和最佳实践,旨在帮助开发者构建高质量React应用。

Elliot Yang·
116 浏览

React通过虚拟DOM和Diffing算法优化DOM操作。Diff算法采用分层比较和Key属性,将复杂度降至O(n)。Fiber架构实现任务分片和优先级调度,提升渲染性能。理解Diff原理、关注性能指标和避免常见问题是React优化的关键。

Elliot Yang·
140 浏览

React 18 升级核心在于并发渲染带来的自动批处理、useEffect同步化和JSX运行时优化。升级需关注类组件同步状态读取、副作用执行时机变化,并使用`createRoot`、函数组件和`useTransition`。渐进式升级、严格模式和兼容性测试至关重要。

Elliot Yang·
109 浏览

本文深入解析Ant Design实战问题,涵盖表单状态管理、ProTable类型系统、Umi微前端调优及文件上传安全。探讨了React 18下Form初始值同步、类型推导优化、跨应用协同及安全上传架构,并展望Ant Design 5.0等未来技术趋势。

Elliot Yang·
145 浏览

本文深入解析MUI Select组件的定制化实践,涵盖弹出层高度控制、虚拟滚动优化、搜索功能实现与性能优化。同时探讨设计系统集成、无障碍访问、定位异常及未来演进方向,旨在构建美观高效的Web表单组件。

Elliot Yang·
111 浏览

React Hooks 采用函数式编程理念,解耦状态与生命周期,并隔离副作用。基于 Fiber 架构,Hooks 以链表形式存储在 Fiber 节点中,通过双缓冲机制和优先级调度更新。useState 管理状态,useEffect 处理副作用。优化策略包括避免闭包陷阱和惰性初始化。未来,Hooks 将在并发模式下发挥更大作用。

Elliot Yang·
141 浏览

本文深入探讨基于 Monaco Editor 的智能 JSON 编辑器实现,以 Chrome 扩展开发为例,解析技术架构、高级配置技巧与工程化实践。重点包括 Monaco Editor 选型、JSON Schema 管理、响应式 Schema 更新、性能优化、类型安全及调试技巧,并探讨潜在问题与解决方案。最后展望 Schema 即服务、AI 增强提示等前沿技术。

Elliot Yang·
334 浏览

React.memo通过记忆化props,避免不必要的组件渲染,提升性能。默认浅比较,复杂对象需自定义比较函数并结合useMemo。虽然能显著提升性能,尤其在列表项组件中,但也带来额外内存开销和代码复杂度。应避免过早优化,并在性能测试后谨慎使用。

Elliot Yang·
156 浏览

本文深入解析现代前端技术体系,涵盖同构渲染与激活机制、React Hooks原理、Fiber架构与时间切片、Node.js链路追踪、Linux tar工具应用及前沿趋势。强调理解底层原理并融入系统编程,以提升工程能力。

Elliot Yang·
106 浏览

本文深入探讨现代前端技术,涵盖CSS方案(CSS-in-JS、CSS Modules)选型、React逻辑复用(HOC、Hooks)、Flex布局应用及并发控制。分析优劣与实践,并展望CSS Houdini、React Server Components、WebAssembly等未来趋势。

Elliot Yang·
99 浏览

本文总结了在 React 项目中使用 TypeScript 的实用技巧。包括:获取枚举键值类型、传递 JSX 或组件作为 Props、使用 `satisfies` 运算符、灵活运用模板字面量类型、定义 `useParams` 类型、类型缩小方法以及 `Array<T>` 与 `T[]` 的选择。这些技巧有助于提升代码质量、安全性和可维护性。

Elliot Yang·
102 浏览

React中安全渲染富文本需防范XSS攻击。避免直接使用`dangerouslySetInnerHTML`,推荐使用如DOMPurify和sanitize-html等过滤库。采用白名单策略,限制标签和属性,并对链接进行安全处理。前后端双重过滤,结合SSR,可提升安全性和性能。选择合适的过滤库并定期更新,是安全展示富文本的关键。

Elliot Yang·
224 浏览

本文对比了styled-components和css-modules的优缺点,讨论了HOC和Hooks的适用场景及替代关系,并给出了使用示例。同时介绍了flex布局的order属性,以及如何使用Schedule类进行Promise的并发控制。

Elliot Yang·
103 浏览

本文总结了React同构渲染中的Isomorphic和Hydrate概念,解释了React Hooks的实现原理,及React Fiber如何通过时间切片实现中断渲染。同时介绍了Node.js链路追踪和tar命令的常用参数及示例。

Elliot Yang·
100 浏览

`React.memo`是用于优化函数组件性能的高阶组件,通过浅比较props来避免不必要的渲染。但默认浅比较对深层嵌套对象无效,且`children`属性会使其失效。建议使用性能诊断工具确认优化需求,并配合其他优化手段,适用于props决定输出且无副作用的简单组件。

Elliot Yang·
98 浏览

本文介绍了如何使用`@monaco-editor/react`在React中配置带Schema的JSON编辑器,实现JSON代码补全功能。关键在于通过`monaco.languages.json.jsonDefaults.setDiagnosticsOptions`设置`fileMatch`属性,将JSON Schema与编辑器关联,并使用`ts-json-schema-generator`生成Schema。

Elliot Yang·
133 浏览

本文深入解析 React Hooks 的实现原理,重点关注 useState。React Hooks 通过闭包和 Fiber 节点上的 Hooks 队列来管理 state。文章详细解释了 useState 的挂载过程,包括 hook 节点的创建、初始值的设置以及 dispatch 函数的绑定,强调了 Hooks 调用顺序一致性的重要性。

Elliot Yang·
93 浏览

本文介绍了 Material-UI (MUI) Select 组件的两个常见问题及解决方案。一是如何设置Select弹出层的高度,通过修改`MenuProps`中的`PaperProps`的`style`属性实现。二是如何为Select添加搜索功能,通过集成Autocomplete组件实现带搜索功能的下拉列表。

Elliot Yang·
127 浏览

本文介绍了 Jest 和 @swc/jest 的配置及使用技巧。内容包括:jsdom 加载子资源配置、GitHub Actions Reporter 使用、优化 MaxWorkers 设置、测试分片执行、@swc/jest 与 @emotion/react 集成,以及测试超时问题的解决方案和原因分析。

Elliot Yang·
210 浏览

本文记录了Ant Design使用中遇到的问题及解决方案。包括:通过`useEffect`或销毁组件解决`form initialValues`无法从state设置问题;声明类型替换ProColumns优化提示;使用项目级插件和配置解决umi4/max中devServer问题;以及通过`beforeUpload`获取Upload组件的file content并使用FormData提交。

Elliot Yang·
103 浏览

本文对比了`requestIdleCallback`和`requestAnimationFrame`。前者用于在浏览器空闲时执行任务,不应修改DOM;后者在浏览器计算样式和布局前执行,适合动画和DOM/CSSOM修改。React Scheduler早期使用`requestIdleCallback`,后因其执行时机问题,改为自定义循环实现。

Elliot Yang·
128 浏览

本文总结了React18的主要变化及升级建议。React18引入自动批量更新,减少渲染次数,但可能导致原有hack失效。useEffect在discrete input事件后同步执行。强调key在列表渲染中的重要性,避免使用索引作为key。介绍了React17优化编译后代码的方式,需要配置`runtime: 'automatic'`。

Elliot Yang·
144 浏览

React的Diff算法旨在高效找出虚拟DOM树的差异,优化了传统O(n^3)复杂度。核心在于同层级比较和利用`key`属性识别列表元素变化,实现O(n)复杂度。当元素类型不同,React会重建树。Fiber Reconciler利用调度器和Fiber Node树,使Diff更高效。

Elliot Yang·
107 浏览

本文是React官方文档阅读笔记,主要涉及事件处理中`this`的绑定问题,以及`React.lazy`、Context API和HOC的使用。针对`React.lazy`,提出使用`startTransition`避免Suspense fallback闪烁的问题。同时解析了React Element的创建、校验和克隆等核心机制,以及开发环境下的额外校验逻辑。

Elliot Yang·
93 浏览

本文介绍了React18的Concurrent模式,通过`createRoot`和`startTransition`优化UI更新。探讨了使用React Hook的原因,包括状态逻辑复用和组件理解难度。解释了React Keys在列表渲染中的作用,以及JSX语法糖的本质。

Elliot Yang·
103 浏览

本文介绍了React Hooks中不常用的`useEffect`、`useLayoutEffect`和`useDebugValue`。`useLayoutEffect`在DOM更新后同步执行,`useEffect`在渲染结束后执行,前者先于后者。`useDebugValue`用于在React DevTools中标记自定义Hook。

Elliot Yang·
107 浏览

本文介绍了React的合成事件机制,它通过事件委托和合成事件抹平浏览器差异,优化性能。React 17将事件委托到root节点,移除了事件池。文章还讨论了原生事件与合成事件的响应顺序,`passive`事件监听器的作用,事件委托的优缺点,以及自定义事件的创建和使用,最后总结了阻止浏览器默认行为的方法。

Elliot Yang·
105 浏览

动态(11)

E
Elliot Yang
公开

使用 react 制作视频 https://www.remotion.dev/

浏览:120点赞:0
E
Elliot Yang
公开

所以 startTransition 降低优先级,降低到多少级呢 Lane

你提到的 startTransition 是 React Concurrent Mode(并发模式)的一部分,用于启动不急迫的用户界面转换,例如数据获取。
当使用 startTransition 开始一个更新时,React 会为该更新分配一个较低的优先级,意味着它可以等待高优先级的任务完成后再执行。在具体的优先级系统(lanes)中,startTransition 降低的具体优先级可能不是公开明确的数字。React 团队为优先级设计了一个相对复杂的系统,其中有多个 "lanes" 代表不同的优先级。
至于你提到的 "多少级",这其实是一个实现细节,React 团队可能会随着版本的迭代进行调整。对于开发者来说,更关心的是 startTransition 能够确保那些不是非常紧急的更新不会阻塞关键用户交互。
如果你想深入了解 React 的并发模式的实现,可以查阅 React 源码或者关注 React 团队的公开通讯。但在日常开发中,了解 startTransition 的基本行为和意图通常就足够了。
浏览:139点赞:0
E
Elliot Yang
公开
  • 所有图片的 alt 属性刷新
  • React hooks 实现原理
  • React Fiber 切片
  • monaco-editor 支持 vue 高亮
浏览:154点赞:0
E
Elliot Yang
公开

一度以为 useImmer 有什么问题,其实问题根源在严格模式下副作用会生效两次。

浏览:166点赞:0
E
Elliot Yang
公开

那些留在2023年的日子:

  • 100vw相对于浏览器的window.innerWidth,是浏览器的内部宽度,注意,滚动条宽度也计算在内!而100%是可用宽度,是不含滚动条的宽度。
    于是calc(100vw - 100%)就是浏览器滚动条的宽度大小(如果有,如果没有滚动条则是0)!左右都有一个滚动条宽度(或都是0)被占用,主体内容就可以永远居中浏览器啦,从而没有任何跳动!
浏览:151点赞:0
E
Elliot Yang
公开

How to use React label element?

If you try to render a <label> element bound to a text input using the standard for attribute, then it produces HTML missing that attribute and prints a warning to the console.
js
1<label for={'user'}>{'User'}</label>
2<input type={'text'} id={'user'} />
Since for is a reserved keyword in JavaScript, use htmlFor instead.
js
1<label htmlFor={'user'}>{'User'}</label>
2<input type={'text'} id={'user'} />
浏览:244点赞:0
E
Elliot Yang
公开

React v16 support custom DOM attributes.
In the past, React used to ignore unknown DOM attributes. If you wrote JSX with an attribute that React doesn't recognize, React would just skip it.
For example, let's take a look at the below attribute:

js
1<div mycustomattribute={'something'} />

Would render an empty div to the DOM with React v15:

html
1<div />

In React v16 any unknown attributes will end up in the DOM:

html
1<div mycustomattribute='something' />
浏览:279点赞:0
E
Elliot Yang
公开

不要使用 函数名 当 react-query 的 key,真的蛋疼了。编译后的函数名变了!

浏览:154点赞:0