1 JSX解析的问题

JSX其实是语法糖;

开发环境会将JSX编译成JS代码

react相关知识点总结-LMLPHP

react定义的方法,用来解析html,第一个参数是“html元素”,第二个参数是“属性”,第三个参数是其子元素;

所以下面的html会转成:

react相关知识点总结-LMLPHP

再如:

react相关知识点总结-LMLPHP

验证方式:使用babel的transfrom-react-jsx插件来转译react代码:

react相关知识点总结-LMLPHP

转译成:

react相关知识点总结-LMLPHP

此外,react是如何编译自定义的标签呢?

react相关知识点总结-LMLPHP

编译后:

react相关知识点总结-LMLPHP

vDom是React初次推广开来的,结合了JSX使用

snabbdom中的h函数=====vue中的_c函数======react中的createELement函数,都是返回的vnode,虚拟dom

然后在通过patch函数 第一次挂载元素,第二次diff

react相关知识点总结-LMLPHP

例如上面的h函数生成的vnode就像右侧的代码;

react相关知识点总结-LMLPHP

react相关知识点总结-LMLPHP

====

react相关知识点总结-LMLPHP

render(){
return (
<div>
<Todo/>
</div>
)
}
编译成:
React.createElement(
"div",
null,
React.createElement(Todo,null)
);
React.createElement(Todo,null) 相当于:
var todo = new Todo(null);
return todo.render()

所以

1. JSX编译成JS,然后JS再转成vnode,也就是最终渲染成html,数据驱动视图;

2. createELement函数相当于h函数,但是h函数第一个参数是默认的html标签名,而createELement函数第一个参数可以是自定义的元素名;

3. 何时patch:ReactDom.render() 和 setState

==============

setState是异步的。

vue修改属性也是异步的。

setState为何使用异步?

1 可能一次执行多个setState;

2 你无法规定限制用户如何使用setState

3 没有必要每次setState都重新渲染,考虑性能

4 即使每次渲染,用户也看不到中间的效果,比如定义的变量从1到10,最后只会直接出结果;

----

说一下 React setState 的过程

每个组件都会继承react的类,则都会有 renderComponent的方法

react相关知识点总结-LMLPHP

写个伪函数,模拟 renderComponent的方法

react相关知识点总结-LMLPHP

1:

react相关知识点总结-LMLPHP

2:

react相关知识点总结-LMLPHP  react相关知识点总结-LMLPHP react相关知识点总结-LMLPHP

vue中使用各种 v-if等语句糅合到html中,而jsx是和js语法一样,单独放在{}中的

3 react的模板和js混合在一起,未分离

react相关知识点总结-LMLPHP

05-18 05:24