Open HCLacids opened 2 years ago
参考链接 该文章排版好差啊,不过写的东西还是挺深入的。
看完之后感觉ReactElement就是虚拟DOM了,他是一种数据结构。
function createElement(type, props, children) { return new Element(type, props, children) } class Element{ constructor(type, props, children){ this.type = type; this.props = props; this.children = children } }
而render时候会操作原生dom
ReactElement对象还有一个 $$typeof属性,它是一个 Symbol类型的变量 Symbol.for('react.element'),当环境不支持 Symbol时, $$typeof被赋值为 0xeac7。
这个变量可以防止 XSS。如果你的服务器有一个漏洞,允许用户存储任意 JSON对象, 而客户端代码需要一个字符串,这可能为你的应用程序带来风险。 JSON中不能存储 Symbol类型的变量,而 React渲染时会把没有 $$typeof标识的组件过滤掉。
React自己实现了一套事件机制,其将所有绑定在虚拟 DOM上的事件映射到真正的 DOM事件,并将所有的事件都代理到 document上,自己模拟了事件冒泡和捕获的过程,并且进行统一的事件分发。
React自己构造了合成事件对象 SyntheticEvent,这是一个跨浏览器原生事件包装器。 它具有与浏览器原生事件相同的接口,包括 stopPropagation()和 preventDefault()等等,在所有浏览器中他们工作方式都相同。这抹平了各个浏览器的事件兼容性问题。
感觉对于虚拟dom的理解可以再buildyourownreact看看
参考链接 该文章排版好差啊,不过写的东西还是挺深入的。
虚拟DOM原理、特性总结
看完之后感觉ReactElement就是虚拟DOM了,他是一种数据结构。
而render时候会操作原生dom
防止XSS
ReactElement对象还有一个 $$typeof属性,它是一个 Symbol类型的变量 Symbol.for('react.element'),当环境不支持 Symbol时, $$typeof被赋值为 0xeac7。
这个变量可以防止 XSS。如果你的服务器有一个漏洞,允许用户存储任意 JSON对象, 而客户端代码需要一个字符串,这可能为你的应用程序带来风险。 JSON中不能存储 Symbol类型的变量,而 React渲染时会把没有 $$typeof标识的组件过滤掉。
虚拟DOM事件机制
React自己实现了一套事件机制,其将所有绑定在虚拟 DOM上的事件映射到真正的 DOM事件,并将所有的事件都代理到 document上,自己模拟了事件冒泡和捕获的过程,并且进行统一的事件分发。
React自己构造了合成事件对象 SyntheticEvent,这是一个跨浏览器原生事件包装器。 它具有与浏览器原生事件相同的接口,包括 stopPropagation()和 preventDefault()等等,在所有浏览器中他们工作方式都相同。这抹平了各个浏览器的事件兼容性问题。