当前位置: 首页 > news >正文

艺术设计专业灵感推荐网站上海网站推广排名

艺术设计专业灵感推荐网站,上海网站推广排名,大气网络公司名字,凡科快图官网在线制作一、是什么 react通过将组件编写的JSX映射到屏幕#xff0c;以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中#xff0c;JSX通过babel最终转化成React.createElement这种形式#xff0c;例如#xff1a; div img src以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中JSX通过babel最终转化成React.createElement这种形式例如 div img srcavatar.png classNameprofile /Hello / /div会被bebel转化成如下 React.createElement(div,null,React.createElement(img, {src: avatar.png,className: profile}),React.createElement(Hello, null) );在转化过程中babel在编译时会判断 JSX 中组件的首字母 当首字母为小写时其被认定为原生 DOM 标签createElement 的第一个变量被编译为字符串 当首字母为大写时其被认定为自定义组件createElement 的第一个变量被编译为对象 最终都会通过RenderDOM.render(...)方法进行挂载如下 ReactDOM.render(App /, document.getElementById(root));二、过程 在react中节点大致可以分成四个类别 原生标签节点文本节点函数组件类组件 如下所示 class ClassComponent extends Component {static defaultProps {color: pink};render() {return (div classNameborderh3ClassComponent/h3p className{this.props.color}{this.props.name}/p /div);} }function FunctionComponent(props) {return (div classNameborderFunctionComponentp{props.name}/p /div); }const jsx (div classNameborderpxx/p a href xxx/ aFunctionComponent name函数组件 /ClassComponent name类组件 colorred //div );这些类别最终都会被转化成React.createElement这种形式 React.createElement其被调用时会传⼊标签类型type标签属性props及若干子元素children作用是生成一个虚拟Dom对象如下所示 function createElement(type, config, ...children) {if (config) {delete config.__self;delete config.__source;}// ! 源码中做了详细处理⽐如过滤掉key、ref等const props {...config,children: children.map(child typeof child object ? child : createTextNode(child))};return {type,props}; } function createTextNode(text) {return {type: TEXT,props: {children: [],nodeValue: text}}; } export default {createElement };createElement会根据传入的节点信息进行一个判断 如果是原生标签节点 type 是字符串如div、span如果是文本节点 type就没有这里是 TEXT如果是函数组件type 是函数名如果是类组件type 是类名 虚拟DOM会通过ReactDOM.render进行渲染成真实DOM使用方法如下 ReactDOM.render(element, container[, callback])当首次调用时容器节点里的所有 DOM 元素都会被替换后续的调用则会使用 React 的 diff算法进行高效的更新 如果提供了可选的回调函数callback该回调将在组件被渲染或更新之后被执行 render大致实现方法如下 function render(vnode, container) {console.log(vnode, vnode); // 虚拟DOM对象// vnode _ nodeconst node createNode(vnode, container);container.appendChild(node); }// 创建真实DOM节点 function createNode(vnode, parentNode) {let node null;const {type, props} vnode;if (type TEXT) {node document.createTextNode();} else if (typeof type string) {node document.createElement(type);} else if (typeof type function) {node type.isReactComponent? updateClassComponent(vnode, parentNode): updateFunctionComponent(vnode, parentNode);} else {node document.createDocumentFragment();}reconcileChildren(props.children, node);updateNode(node, props);return node; }// 遍历下子vnode然后把子vnode-真实DOM节点再插入父node中 function reconcileChildren(children, node) {for (let i 0; i children.length; i) {let child children[i];if (Array.isArray(child)) {for (let j 0; j child.length; j) {render(child[j], node);}} else {render(child, node);}} } function updateNode(node, nextVal) {Object.keys(nextVal).filter(k k ! children).forEach(k {if (k.slice(0, 2) on) {let eventName k.slice(2).toLocaleLowerCase();node.addEventListener(eventName, nextVal[k]);} else {node[k] nextVal[k];}}); }// 返回真实dom节点 // 执行函数 function updateFunctionComponent(vnode, parentNode) {const {type, props} vnode;let vvnode type(props);const node createNode(vvnode, parentNode);return node; }// 返回真实dom节点 // 先实例化再执行render函数 function updateClassComponent(vnode, parentNode) {const {type, props} vnode;let cmp new type(props);const vvnode cmp.render();const node createNode(vvnode, parentNode);return node; } export default {render };三、总结 在react源码中虚拟Dom转化成真实Dom整体流程如下图所示 其渲染流程如下所示 使用React.createElement或JSX编写React组件实际上所有的 JSX 代码最后都会转换成React.createElement(...) Babel帮助我们完成了这个转换的过程。createElement函数对key和ref等特殊的props进行处理并获取defaultProps对默认props进行赋值并且对传入的孩子节点进行处理最终构造成一个虚拟DOM对象ReactDOM.render将生成好的虚拟DOM渲染到指定容器上其中采用了批处理、事务等机制并且对特定浏览器进行了性能优化最终转换为真实DOM
http://www.hkea.cn/news/14489993/

相关文章:

  • 网站开发连接数据库有没有建网站的app
  • 用织梦做的网站怎样看wordpress 钩子的好处
  • 怎么做网站端口代理软件开发文档编制
  • 深圳四站合一网站建设电话网站开发招标网
  • .net 网站开发吉安网站建设jxthw
  • 有意思的网站企业网站怎么收录
  • 北京学做网站王烨名字怎么样
  • 个人可以做网站维护吗揭阳网站开发定制
  • 怎么样利用一些网站开发客户关于网站建设的工作总结
  • 网站建设与维护课程灰色行业推广平台
  • 网站 设计工具外包网站设计哪家好
  • 网站图片一般像素源码下载免费
  • 网站的登录注册页面怎么做专业团队图片黑人抬棺
  • 网站空间流量企业模板网站怎么做
  • 个人网站设计论文参考文献网站如何做h5动态页面
  • 手机怎么制作网站教程视频网站首页html代码在哪
  • 这么建立com的网站wordpress如何做产品展示页
  • 墨刀怎么做网站商城app有哪些
  • 网站系统建设招标成都网站建设公司思乐科技
  • 北京通州做网站的公司网页设计与制作教程课后答案第三版
  • 宁波网站建设 泊浮科技推广普通话手抄报简单又好看
  • 企业网站制作排名ae模板
  • 为什么装修公司建议半包成都网站外包优化公司
  • asp公司网站竞价外包托管费用
  • 随州网络优化网站建设公司建设银行网站上的的研究报告
  • 网站建设的相关知识手机怎么做网站教程
  • 网站海外推广wordpress页面重定向
  • 网站服务器租用中信建设有限责任公司陈晓佳简历
  • 怎么用ps做网站效果图怎么可以做自己的网站
  • 旅游网站内容规划特点0基础如何快速做网站