博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组件化和 React几点问题
阅读量:6447 次
发布时间:2019-06-23

本文共 2140 字,大约阅读时间需要 7 分钟。

1. 对组件化的理解

首先谈,组件封装:封装数据、视图、变化逻辑;

其次说,组件复用:通过props传值

2. JSX的本质

第一,JSX的语法。它以html标签的形式存在,引入js变量和表达式,if语法,for循环,style样式和className,并且支持事件

第二,JSX语法根本无法被浏览器解析,开发环境会把JSX语法解析成js对象
第三,通过React.createElement方法把JSX语法解析成JS代码。方法参数接收(标签名,属性,子元素)。如何解析的?
解析前:

// render函数    render() {      const list = this.props.list      return (        
    {list.map((item, index) => { return
  • {item}
  • })}
) }复制代码

解析后:

// 解析后    function render() {      const list = this.props.list      React.createElement('ul',        null,        list.map((item, index) => {          return React.createElement('li', { key: index }, item)        }))    }复制代码

3. JSX和vdom的关系

  1. 关于为什么要用vdom?JSX模板需要解析成html,数据驱动视图
  2. 其中React.createElement()和h()函数都生成vnode【见上个问题】 第一次渲染是在ReactDOM.render(,document.getElementById(‘root’))的时候,通过dispatch(container,vnode)把vnode渲染在容器上。
// 第一次 dispatch(container,vnode)ReactDOM.render(
, document.getElementById('root'))复制代码

重新渲染是在使用setState()修改data的时候触发re-render生成新的newVnode,然后通过dispatch(vnode,newVnode)用新生成的替代旧的。

addTodo(title) {        const currentList = this.state.list        // 重新 dispatch(vnode,newVnode)        this.setState({          list: currentList.concat(title)        })    }复制代码
  1. 关于生成的vnode的本质就是js对象,对于我们平常使用的标签(如div,p等),React.createElement()的时候生成对应的标签。
    对于自定义的组件,则生成自定义组件的实例,通过实例的render函数再次生成新的vnode,依次的循环迭代下去,直到变成最底层我们平常使用的标签。
    带自定义组件的render:
// render函数    render() {      const list = this.props.list      return (        

普通标签

)}复制代码

自定义组件解析后:

// 解析后    function render() {      const list = this.props.list      React.createElement('div',        null,        React.createElement('p', null, '普通标签'),        React.createElement(List, { data: this.state.list })        // List是自定义组件,一般是先初始化List组件的实例,然后调用实例的render函数生成vnode,依次循环,知道没有自定义组件        // var list = new List({data:this.state.list})        // var vnode = list.render()      )}复制代码

4.setState的过程

首先,setState是异步的,为了避免多次修改引发dom的re-render。

其次,每个组件都继承了顶层React.Component组件中的renderComponent方法,重新执行实例的render
最后,根据render返回的newVnode和preVnode进行对比,通过dispatch函数新的节点替代旧的节点

5.最后关于react和vue的区别

转载地址:http://putwo.baihongyu.com/

你可能感兴趣的文章
【cisco探索之路】
查看>>
Python条件语句
查看>>
JavaScript小结
查看>>
python Web开发你要理解的WSGI & uwsgi详解
查看>>
基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境
查看>>
SQL语言:DDL/DML/DQL/DCL
查看>>
swift代理使用
查看>>
代数几何
查看>>
大牛网站
查看>>
Ajax传数据到servlet
查看>>
springMVC和struts2有什么不同?为什么要用springMVC或者struts2?让你实现一个MVC框架大概如何设计?...
查看>>
微信JSApi支付~坑和如何填坑
查看>>
使用 iview Table 表格组件修改操作的显示隐藏
查看>>
招银网络科技笔试题
查看>>
onTouch和onTouchEvent
查看>>
八进制转十进制
查看>>
mssqll2008下只显示相关的登陆操作
查看>>
网站物理路径查找思路
查看>>
App引流增长技术:Deeplink(深度链接)技术
查看>>
赠云风大侠
查看>>