avatar
Articles
158
Categories
18

Home
Archives
Categories
Salute Those Who Gaze At The Stars
Home
Archives
Categories

Salute Those Who Gaze At The Stars

React系列:第九回(concurrentmode、fiber)
Created2024-04-23|React系列
本文介绍,react快速渲染的基石:concurrentmode、fiber上一代版本存在的问题在第一回中,我们通过手撕myCreateElement和myRender实现了基本的功能,但是仔细观察下之前写的render,是否存在什么问题? const myRender = (element, container) => { const dom = element.type === 'text'? document.createTextNode(element.props.nodeValue): document.createElement(element.type) Object.keys(element.props).filter((item) => item !== 'children').forEach((item) => dom[item] = element.props[item]) element?.props?.children?.forEach((child) => myRender(child, dom)) container.append ...
发布自己的npm包
Created2024-04-22|前端剑气双修
本文主要提一下,往公网上发布自己的npm包,大概的流程。目前的公司,稍微正经点的,都会有贴合自身业务的一套组件库,封装成所谓的“SDK层”,这样能够极大的减少前端项目的代码量。当然,这需要业务自身足够的稳定,否则,懂得都懂。 1. github创建一个仓库,npm初始化一下,完善包的一些必要字段。2. 假如自己想要复用的代码3. 登陆发布npm login npm publish 具体操作参考下面文章,写的非常详细 https://juejin.cn/post/7039140144250617887 整个流程还是很简单的,当然在实操过程中碰到一个小问题。npm login 没有出现 username,反而是跳转到了cnpm注册...,解决方案:npm config set registry https://registry.npmjs.org/ 更新包的版本// patch:补丁号,修复bug,小变动,如 v1.0.0->v1.0.1 npm version patch // minor:次版本号,增加新功能,如 v1.0.0->v1.1.0 npm version minor ...
CSS系列:渐进式展示文本效果的实现
Created2024-04-22|css专栏
本文主要介绍一下渐进式的展示文本效果实现先给一张最终效果图: 这个效果的实现,主要是借助animate和framer-motion库的几个钩子函数useTransform、useMotionValue。 1. html部分return <motion.h2 className={className}>{displayText}</motion.h2>; 2. useTransform、useMotionValue// text为props传入的值 const textIndex = useMotionValue(0); const baseText = useTransform(textIndex, () => text); const rounded = useTransform(count, (latest) => Math.round(latest)); const displayText = useTransform( rounded, (latest) => `${baseText.get().slice(0, ...
Webpack系列:第八回
Created2024-04-15|Webpack系列
本文简单聊聊webpack同vite的差异众所周知,webpack是大部分项目的标配,而vite,更是后起之秀。原因在于vite的极速开发体验,一个字儿:快。vite是怎么做到的呢?Webpack 是 “先打包再干活”,Vite 是 “边干活边打包”——Vite 快的本质,是跳过了 “全量打包” 的冗余步骤,只在需要时才处理文件。 前者全量打包,后者按需编译,没有打包。vite利用浏览器能直接识别 ES Module(import/export)的特性,启动时只搭好服务器,不碰任何文件。浏览器要哪个文件,Vite 才去编译哪个,相当于 “按需开工”,启动速度自然秒级。注意,在开发环境下,vite是没有打包的动作的,这里的编译指的是把 “浏览器不认识的文件” 转成 “浏览器能认识的文件”,比如 TS→JS、Vue 组件→JS+CSS、Sass→CSS)。在生产环境中才会用rollup去打包 编译工具的不同。前者用的babel,后者用的esbuild(go),比 JS 快 10-100 倍 热更新。一旦代码改动,前者会编译打包变动部分,后者也是编译变化的那部分,但是没有打包的动 ...
Webpack系列:第七回
Created2024-04-15|Webpack系列
本文杂记,记录一些webpack使用过程中碰到的奇奇怪怪的问题和知识点 react18初始化项目时,没有webpack默认是隐藏的,仔细观察可以发现,项目如下方式启动 "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "analyze": "source-map-explorer 'build/static/js/*.js'" }, 此时需要暴露: npm run eject Sourcemap(源映射)是一种文件,用于将编译后的代码映射回原始源代码。说白了就是在开发模式时,在浏览器中调试代码时,看到的是源码而不是杂乱无章的变异之后的代码
React系列:第八回(createElement、render)
Created2024-04-14|React系列
本文开始,我们将用几篇文章记录下,我们的my_react的实现逻辑。类似于vue的学习过程,我们将尝试手写react的重要组成部分,以便更为彻底的理解其底层实现。涉及的内容包括:createElement、render、cocurrent mode、fiber、render commit、reconcilliation及function components。本文介绍createElement和render。 渲染整体逻辑const content = React.createElement( 'div', { title: 'title', id: 'id', }, '川崎重工' ) console.log('content>>>', content) const root = ReactDOM.createRoot( document.getElementById('root') ); root.render(content) 从上面代码不难看出,通过调用createElement,会生成一种dom的数据 ...
区块链文档0
Created2024-04-11|区块链研发
本系列文章,将围绕实践中的项目,用于记录开发过程中,遇到的那些个事儿本项目也是一个极具挑战性的任务:基于opensuim开发一套前端代码编辑器,没错,就是要把vscode搬到页面上。我们的最终目的, 是为区块链开发者提供一整套在线敲代码的集成环境,渐进式提供各种链。 在正式内容开始前,先见到介绍些区块链相关的背景知识。 1.什么是区块链?区块链最好的解释就是一个公共数据库公链:任何人都可以参与的区块链,如比特币和以太坊。联盟链:需要得到许可的参与者才能加入的区块链,如R3 Corda和Hyperledger Fabric。私有链:仅允许特定组织或个人参与的区块链。 去中心化是基于P2P网络的,没有一台机器作为中心化的服务器的功能,网络中的每一台电脑都是平等的,任何一台掉线、宕机,都不会影响整个网络继续运行。 定量法币通常与背后的黄金或者所谓的GDP挂钩,算是相对固定(经济低迷时的过量发行暂且别考虑了)。加密货币,可以算作绝对的固定数量,或者少量的增发(可以弥补一些丢失的币等),防止通货膨胀。 加密 上面就是加密货币的三个典型特征,第一点借助p2p网络实现没问题,但是后面的二三两点存 ...
React系列:第七回(组件的设计模式)
Created2024-03-22|React系列
本文我们聊聊react组件的设计模式(逻辑复用)一. render props在前面讲解登陆态持久化的文章中,我们实际上已经实践了render props: const AuthRoute = ({ children}) => { const token = getToken() if (token) { return <>{children}</> } else { return <Navigate to='/login' replace /> } } 通过打印props我们能够看到,包裹着内容,实际上会在props中,以children的属性传递给AuthRoute组件。在AuthRoute中,我们将token的判断逻辑扔在了该组件中,其中包裹着目标组件。若有token,跳转到目标页面,否则,跳转到login。高效复用逻辑代码。 二. 高阶组件函数包裹组件,之前提到的memo就是一个实例,下面写一个HO ...
React系列:第六回(React的渲染流程)
Created2024-03-22|React系列
本文简单聊聊React的渲染流程在前面介绍vue的系列文章中,我们通过手写vue类的方式,将vue的渲染流程基本介绍了,其框架底层的逻辑如下: 初次加载时, 数据的响应式处理和模版编译,完成初始化页面的显示。所谓数据的响应式就是让我们能够知道,什么地方用到了数据,然后在数据变化时,通知那些用到该数据的地方重新编译。而模版编译则是将模版代码转换成html代码,让页面能够显示 状态数据变化时, 以更新数据后的新虚拟dom和旧的虚拟dom为输入,经过diff和patch,找出差异, 更新差异,最后重新渲染 一. 那么在react中, 这个过程又是如何的呢?实际上无论什么前端框架,其渲染的逻辑都是一致的,只是实现的方式不同,react亦是如此。 初始渲染:JSX 编译 → React.createElement调用 → 执行调用生成虚拟 DOM → 基于虚拟 DOM 构建 Fiber 树 → 提交(Commit)阶段:根据 Fiber 树创建真实 DOM 挂载到页面 → 执行副作用。 更新渲染:状态变化,触发重渲染 → 生成新的虚拟 DOM → 进入调和阶段:基于新虚拟 DOM 和旧 F ...
React系列:第五回(事件)
Created2024-03-21|React系列
本文记录一下原生事件和react事件机制的差异一. 基本介绍原生dom事件: 事件捕获 —> 目标dom —> 事件冒泡react事件系统(合成事件): 事件在具体的dom节点上触发后, 会被冒泡到document上,document上所绑定的统一事件处理程序,会将事件分发到具体的组件实例中去。这一套机制被称为合成事件。 二. 执行顺序 原生事件优先执行,合成事件后执行。子元素原生事件执行、父元素原生事件执行、子元素合成事件执行、父元素合成事件执行、document原生事件执行。 阻止合成事件间的冒泡: e.stopPropagation();阻止合成事件与最外层document上事件的冒泡: e.nativeEvent.stopImmediatePropagation() 三. 为什么要用合成事件前面说了,合成事件会模拟原生dom的行为,那么为什么不直接用原来的呢,非要自己搞一套?主要是为了平台兼容。 四:差异 绑定方式:原生事件绑定在真实 DOM,React 事件绑定在虚拟 DOM 执行机制:React 事件通过事件委托到 document 统一处理,原生是直接绑定 ...
1…345…16
avatar
Miles | Isshin
Articles
158
Categories
18
Follow Me
Announcement
変わらない闘志,折れない魂
Recent Post
Cesium系列:概览2026-01-20
Mysql的问题及对策2026-01-19
3d点云项目性能测试2025-12-25
借助AI的能力,实现本地知识库(非工具版)2025-09-26
借助AI的能力,实现本地知识库(工具版)2025-09-25
Categories
  • AI2
  • Miscellany7
  • Paperjs系列7
  • React系列11
  • Rust系列1
  • Webkit系列4
  • Webpack系列8
  • css专栏5
Archives
  • January 20262
  • December 20251
  • September 20255
  • August 20252
  • July 20252
  • March 20251
  • February 20251
  • January 20251
Info
Article :
158
UV :
PV :
Last Push :
©2020 - 2026 By Miles | Isshin
Framework Hexo|Theme Butterfly