加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

深入理解React的Virtual DOM

发布时间:2019-04-25 15:12:19 所属栏目:建站 来源:Choerodon
导读:副标题#e# React在前端界一直很流行,而且学起来也不是很难,只需要学会JSX、理解State和Props,然后就可以愉快的玩耍了,但想要成为React的专家你还需要对React有一些更深入的理解,希望本文对你有用。 这是Choerodon的一个前端页面 在复杂的前端项目中一

为此,开发者需要使用ReactDOM库及其render方法:

  1. function Table({ rows }) { /* ... */ } // 组件定义  
  2. // 渲染一个组件  
  3. ReactDOM.render(  
  4.   React.createElement(Table, { rows: rows }), // "创建" 一个 component  
  5.   document.getElementById('#root') // 将它放入DOM中  
  6. ); 

当ReactDOM.render被调用时,React.createElement最终也会被调用,它返回以下对象:

  1. // 这个对象里还有很多其他的字段,但现在对开发者来说重要的是这些。  
  2. {  
  3.   type: Table,  
  4.   props: {  
  5.     rows: rows  
  6.   },  
  7.   // ...  

这些对象构成了React意义上的Virtual DOM

它们将在所有进一步渲染中相互比较,并最终转换为真正的DOM(与Virtual DOM对比)。

这是另一个例子:这次有一个div具有class属性和几个子节点:

  1. React.createElement(  
  2.   'div',  
  3.   { className: 'cn' },  
  4.   'Content 1!',  
  5.   'Content 2!',  
  6. ); 

变成:

  1. {  
  2.   type: 'div',  
  3.   props: {  
  4.     className: 'cn',  
  5.     children: [  
  6.       'Content 1!',  
  7.       'Content 2!'  
  8.     ]  
  9.   }  

所有的传入的展开函数,也就是React.createElement除了第一第二个参数剩下的参数都会在props对象中的children属性中,不管传入的是什么函数,他们最终都会作为children传入props中。

而且,开发者可以直接在JSX代码中添加children属性,将子项直接放在children中,结果仍然是相同的:

  1. <div className='cn' children={['Content 1!', 'Content 2!']} /> 

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读