前端React结构工程-改写render

2 篇文章 0 订阅

前端React结构工程-改写render

工程准备事项

  • npm install
  • cnpm
  • 初始化工程实例
    在这里插入图片描述
    以上是实例化,安装过npm后的列表
    接下来使用 npm run start 来启动项目
    当你启动项目后会看到react给我们准备好的 默认界面
    React中的 diff原理 和 调度原理是 这次探索的目标
    只有搞明白这些,才能合理的利用react开发项目
    请添加图片描述
    我们实际使用的 项目是子集中的子集 d2
    首先打开默认工程中的 package.json
    在这里插入图片描述
    在 scripts中 可以看到
  • “start”: “react-scripts start”
  • “build”: “react-scripts build”
  • “test”: “react-scripts test”
  • “eject”: “react-scripts eject”
    那么 从目录的react-scripts 接着向上溯源
    在这里插入图片描述

    "bin": {
    "react-scripts": "./bin/react-scripts.js"
  },

    "dependencies": {
 	"file-loader": "6.1.1",
    "fs-extra": "^9.0.1",
 	"react-app-polyfill": "^2.0.0",
    "react-dev-utils": "^11.0.3",
    "react-refresh": "^0.8.3",
    },
    
 "devDependencies": {
    "react": "^17.0.1",
    "react-dom": "^17.0.1"
  },

bin=>react-scripts 是执行的索引目录
react-scripts在首次调用到的时候执行一次,或编译时运行
使用的 npm run start 会在这里解释为 触发的语句
如果想要增加额外的触发语句,可自行增加api(event)
在这里插入图片描述
file-loaderfs-extra是关联使用的,对于改写render来说 没多大实际意义。所以这里就过了
这里找到 require-render-returnno-require-return-value 将里面的 render改写为自定义的参数。
并在html中利用原型查看其原型,是否符合推测与更改的代码。
在这里插入图片描述
经过修改后,直接 npm run start一下
console.log的结果是 object对象.原型.的方法 为什么要说原型,一会大家就知道了
请添加图片描述
接下来索引进入到 react-Dom里面 查看源码并改写
请添加图片描述
…/node_modules/react-dom/cjs目录下的 就是 react的核心
react-dom.development.js 以下的操作 均是对 该文件进行 溯源修改的
REACT_ELEMENT_TYPE =0xeac7=react.element
如果你写过React的类组件,每一个类组件都是要继承于React.Component的。因此,如果我们在react.element中进行溯源
请添加图片描述
这句话就是

 判断(类型 新子集 ==='对象'&&新子集 !==)
 {
 	switch(新子集.类型)
 	{
 	  c 变量 =创建一个元素来自 element[渲染](子集,返回的.,穿透)
 	}
 }

在react.element创建好新子集后,它必然是需要props出去的
接下来看它的pops,中间是默认传递了key。这就证明他内部的props是独一无二的,是肯定可以修改的
请添加图片描述
请添加图片描述
请添加图片描述
以上的原理我就搞明白了,谁是父元素的原型。
我们调用的是子集中的子集。你在写组件的关联都是类似的树循环。
请添加图片描述
最后将你传递的值 进行类型判断
如果 最初的 function不是 object类型的话,就会报错
并且这里的 Function 不是蓝色的,是绿色的
基本上到这里 溯源就结束了。已经知道的

  1. react.render 是从哪里起始的调用
  2. element是如何渲染的
  3. react是如何调度的
    很多函数是关联的,不要只看命名就不去溯源
    因为其中很多importa的会误导

扩展:react的更多溯源

retryTimeOutBoundary 渲染重绘
markRootUpdated 节点重绘
resolverRetryWakeable 虚拟Dom的different
在这里插入图片描述
captureCommitPhaseError 替换过时的Dom
captureCommitPhaseErrorOnRoot 替换过时的DOM在Root中
在这里插入图片描述

React 的总体流程

在这里插入图片描述

我是大菠萝!希望能帮助更多人
如果你们要做组件,那这里可能对你们有点帮助。
还没人敢改写 react的代码吧?哈哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值