React的createElement和render手写实现示例.docx

React的createElement和render手写实现示例.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

React的createElement和render手写实现示例

目录TL;DR科普概念准备工作实现createElement实现render测试

TL;DR

本文的目标是,手写实现createElement和render

React.createElement实现的本质就是整合参数变成对象,这个对象就是react元素ReactDOM.render实现的本质就是根据react元素(对象)创建真实元素及其属性和子元素

科普概念

JSX语法-就是类似html的写法h1颜酱span最酷/span/h1JSX语法本质-JSX本质是语法糖,实际会被babel编译成React.createElementreact元素-并不是真实DOM,实际是React.createElement函数返回的对象,结构大约如下,核心属性就是type、props、props.children

reactElement={

type:div,

props:{

className:title,

style:{color:#f69},

children:world,

准备工作

先创建一个react项目:

create-react-appreact-source

安装cross-env和修改命令,兼容React旧写法

yarnaddcross-env

修改package.json的命令:

scripts:{

start:cross-envDISABLE_NEW_JSX_TRANSFORM=truereact-scriptsstart,

build:cross-envDISABLE_NEW_JSX_TRANSFORM=truereact-scriptsbuild

删除src里面所有内容,然后新建index.js

importReactfromreact;

importReactDOMfromreact-dom;

constreactElement_text=onlytext;

constreactElement_oneNode=(

divclassName=title#f69}}

onenode

/div

constreactElement_oneChildNode=(

div

spanonechildnode/span

/div

constreactElement_multipleNode=(

div

spanfirstchild/span

textchild

/div

//onlytext

console.log(reactElement_text);

//{type:div,props:{className:title,style:{color:#f69},children:onenode},};

console.log(reactElement_oneNode);

//{type:div,props:{children:{type:span,props:{children:onechildnode},},},};

console.log(reactElement_oneChildNode);

//{type:div,props:{children:[{type:span,props:{children:firstchildnode}},text,],},};

console.log(reactElement_multipleNode);

ReactDOM.render(reactElement_multipleNode,document.getElementById(root));

留心看,props.children的结构,有三种类型:字符串、对象、数组。

npmstart

(^▽^),就可以看到http://localhost:3000/了!

实现createElement

JSX语法相当于React.createElement,那么先实现createElement。

先看看怎么相当,在线访问:

分析参数-输入

第一个参数,始终是最外层元素名第二个参数,始终是最外层的元素属性集合或null第三个参数及以后的参数,始终是子

文档评论(0)

187****0335 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档