首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

React源码分析1-jsx转换及React.createElement

React.createElement 其接收三个或以上参数:type:要创建 React 元素类型,可以是标签名称字符串,如 'div' 或者 'span' 等;也可以是 React组件 类型(class...组件或者函数组件);或者是 React fragment 类型。...children:从第三个参数开始后参数为当前创建React元素子节点,每个参数类型,若是当前元素节点 textContent 则为字符串类型;否则为新 React.createElement...= null) { if (hasValidRef(config)) { // 有合法 ref 时,则 ref 赋值 ref = config.ref; if (...函数创建虚拟 dom,ReactElement 主要是在开发环境下通过 Object.defineProperty 将 _store、_self、_source 设置为不可枚举,提高 element

81830

React源码分析1-jsx转换及React.createElement_2023-02-19

React.createElement 其接收三个或以上参数:type:要创建 React 元素类型,可以是标签名称字符串,如 'div' 或者 'span' 等;也可以是 React组件 类型(class...组件或者函数组件);或者是 React fragment 类型。...children:从第三个参数开始后参数为当前创建React元素子节点,每个参数类型,若是当前元素节点 textContent 则为字符串类型;否则为新 React.createElement...= null) { if (hasValidRef(config)) { // 有合法 ref 时,则 ref 赋值 ref = config.ref; if (...函数创建虚拟 dom,ReactElement 主要是在开发环境下通过 Object.defineProperty 将 _store、_self、_source 设置为不可枚举,提高 element

76520

【React深入】深入分析虚拟DOM渲染过程和特性

,其被认定为自定义组件, createElement第一个变量被编译为对象; 另外,由于 JSX提前要被 Babel编译,所以 JSX不能在运行时动态选择类型,比如下面的代码: function...1.获取子元素个数 —— 第二个参数后面的所有参数 2.若只有一个子元素赋值 props.children 3.若有多个子元素,将子元素填充为一个数组赋值 props.children (3)....type:元素类型,可以是原生html类型(字符串),或者自定义组件(函数或 class) key:组件唯一标识,用于 Diff算法,下面会详细介绍 ref:用于访问原生 dom节点 props:传入组件...createElement函数对 key和 ref等特殊 props进行处理,并获取 defaultProps对默认 props进行赋值,并且对传入孩子节点进行处理,最终构造成一个 ReactElement...虚拟DOM组成 即 ReactElementelement对象,我们组件最终会被渲染成下面的结构: type:元素类型,可以是原生html类型(字符串),或者自定义组件(函数或 class) key

2.2K31

【React】1427- 如何使用 TypeScript 开发 React 函数式组件?

如何使用 TypeScript 定义函数式组件 函数式组件通常接受一个 props 参数,返回一个 JSX 元素或者 null。...使用 React.FC 由于 React 不是使用 TypeScript 开发,使用是社区开发 @type/react 包提供类型,里面有一个通用类型 FC ,允许我们为函数组件添加类型。...使用 JSX.Element 使用 JSX.Element 类型作为函数式组件返回值类型,当组件返回值不是 JSX.Element 类型时,TypeScript 就会提示错误。...函数式组件返回值不能是布尔值 当我们在函数式组件内使用「条件语句」时,如果返回是非 JSX 元素或者非 null 值,React 将会报错: const ConditionComponent = (...,应该是让函数式组件返回一个有效 JSX 元素或者 null: const ConditionComponent = ({ useRender = false }) => useRender ?

6.3K10

React 进阶 - JSX

[...children] ) createElement 参数: type:元素类型 如果是组件类型,传入对应类或函数 如果是 DOM 元素类型,传入 div 或 span 等字符串...); # createElement 处理后 jsx 转换规则: jsx 元素类型 react.createElement 转换后 type 属性 element 元素类型 react element...类型 标签字符串,如 div fragment 类型 react element 类型 symbol react.fragment 类型 文本类型 字符串 无 数组类型 返回数组结构,里面的元素被 react.createElement...转换 无 组件类型 react element 类型 组件类或组件函数本身 三元运算 / 表达式 先执行三元运算,然后按上面规则转换 看三元运算结果类型 函数执行 先执行函数,然后按上面规则转换 看函数执行结果类型...("span", null, "let us learn React") ); } # api 层面的实现 模拟 Babel 处理 JSXelement.jsx 测试代码: import React

74810
领券