首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JSX_TypeScript笔记17

类型断言的更多信息,见三.类型断言 二.元素类型 对于一个 JSX 表达式,expr可以是环境中的固有元素(intrinsic element,即内置组件,比如 DOM 环境中的div...两种元素的区别在于: 生成的目标代码不同 React 中,固有元素会生成字符串(比如React.createElement("div")),而自定义组件不会(比如React.createElement(...) 二者单从 JSX 表达式的形式上区分不开,因此先当作 SFC 按照函数重载去尝试解析,解析失败才当组件处理,还失败就报错 无状态的函数组件 形式上是个普通函数,要求第一个参数是props对象,返回类型是...; } } 类似于 Class 的双重类型含义,对于 JSX 表达式,组件类型分为 2 部分: 元素类型(element class...,就取组件构造函数 SFC 第一个参数的类型 具体的,固有元素属性以a的href为例: namespace JSX { interface IntrinsicElements { //

2.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

React 源码:ReactElement 和 FiberNode 是什么?

可以是原生元素,用字符串表示,比如 "div",或者是用户自己写的函数组件或是组件,以及 React 内置的特殊组件,会用 symbol 表示,比如 Symbol(react.fragment)、Symbol.for...export const ClassComponent = 1; // 组件 export const IndeterminateComponent = 2; // 不知道是函数组件还是组件 export...3、elementType 表示对应的组件,类似 ReactElement 的 type,值可能为 "div"、函数函数本身。...4、type 基本和 elementType 类似,多了 Symbol(react.offscreen) 这些 React 内置的特殊类型 symbol 值。...5、stateNode:对应的真实 DOM 节点, 组件实例(比如是个函数组件组件) fiber 树结构相关属性 然后是 fiber 链表指向相关的属性: 1、return:父节点 2、child

81420

React基础(2)-深入浅出JSX

Vue的template的),但是它具有JavaScript的全部的功能 可以在JS中书写XML(HTML) 只能有且仅有一个顶层元素 ,当然也可以借助React提供的Fragment(也叫占位符)这个内置组件将你写的...; }` 注意:布尔类型Null 以及 Undefined 将会被忽略,false, null, undefined, true是合法的子元素。但它们并不会被渲染。...、undefined 等值,你需要先将它们转换为字符串: 转换字符串有如下三种方法 对象.toString(),注意此方法,针对数据类型null对象,及undefined,不适用 用空字符串拼接:variable...( ElButton, { bgColor: green}, children: "绿色按钮" ) 在编译之后,JSX 表达式会被转为普通 JavaScript 函数调用,并且对其取值后得到...,这个的确是滴,JS水平高,是可以直接喊高价的 小结 JSX 是 JavaScript 语言的一种语法扩展,长得像 HTML,并不是 HTML,附加了原生HTML标签不具备的能力,例如:自定义属性,以及后续的组件传值

2.4K00

react组件深度解读

使用函数组件时,你不必将包含属性列表的对象命名为 props,这是标准做法。当我们使用组件时,属性列表始终命名为 props。请注意,props 是可选的。有些组件可以没有 props。...但是,组件必须有返回值。React 组件不能返回 undefined(显式隐式)。它必须返回一个值。它可以返回 null 以使渲染器忽略其输出。...可以是函数(使用render方法)。React Element 是从组件返回的元素。它是与真实 DOM 相对应的虚拟节点。...对于函数组件,此元素是函数返回的对象,对于组件,元素是组件的 render 方法返回的对象。React 元素不是你在浏览器中看到的,它们只是内存中的对象,你无法改变它们。...对于函数组件,React 只使用函数的调用来确定要渲染的 DOM 实例。九、组件的优点术语 "组件" 被许多框架和库使用。

5.5K20

React学习(二)-深入浅出JSX

Vue的template的),但是它具有JavaScript的全部的功能 可以在JS中书写XML(HTML) 只能有且仅有一个顶层元素 ,当然也可以借助React提供的Fragment(也叫占位符)这个内置组件将你写的...; } 注意:布尔类型Null 以及 Undefined 将会被忽略,false, null, undefined, true是合法的子元素。但它们并不会被渲染。...、undefined 等值,你需要先将它们转换为字符串: 转换字符串有如下三种方法 对象.toString(),注意此方法,针对数据类型null对象,及undefined,不适用 用空字符串拼接:variable...在编译之后,JSX 表达式会被转为普通 JavaScript 函数调用,并且对其取值后得到 JavaScript 对象 React.createELmenet会构建一个js对象来描述你的HTML结构信息...(夕阳西下金灿灿,晚风夜色写代码) 小结 JSX 是 JavaScript 语言的一种语法扩展,长得像 HTML,并不是 HTML,附加了原生HTML标签不具备的能力,例如:自定义属性,以及后续的组件传值

2K30

react组件用法深度分析

使用函数组件时,你不必将包含属性列表的对象命名为 props,这是标准做法。当我们使用组件时,属性列表始终命名为 props。请注意,props 是可选的。有些组件可以没有 props。...但是,组件必须有返回值。React 组件不能返回 undefined(显式隐式)。它必须返回一个值。它可以返回 null 以使渲染器忽略其输出。...可以是函数(使用render方法)。React Element 是从组件返回的元素。它是与真实 DOM 相对应的虚拟节点。...对于函数组件,此元素是函数返回的对象,对于组件,元素是组件的 render 方法返回的对象。React 元素不是你在浏览器中看到的,它们只是内存中的对象,你无法改变它们。...对于函数组件,React 只使用函数的调用来确定要渲染的 DOM 实例。九、组件的优点术语 "组件" 被许多框架和库使用。

5.4K20

react的jsx和React.createElement是什么关系?面试常问5

图片需要注意的是:自定义组件时需要首字母用大写,会被识别出是一个组件,这是一个规定。小写默认会认为是一个html标签,编译成字符串。...type:用于标识节点的类型。它可以是类似“h1”“div”这样的标准 HTML 标签字符串,也可以是 React 组件类型 React fragment 类型。...null : config.__self; source = config.__source === undefined ? null : config....element = { // REACT_ELEMENT_TYPE是一个常量,用来标识该对象是一个ReactElement $$typeof: REACT_ELEMENT_TYPE, // 内置属性赋值...ReactDOM.render( // 需要渲染的元素(ReactElement) element, // 元素挂载的目标容器(一个真实DOM) container, // 回调函数

47630

react的jsx和React.createElement是什么关系?面试常问

图片需要注意的是:自定义组件时需要首字母用大写,会被识别出是一个组件,这是一个规定。小写默认会认为是一个html标签,编译成字符串。...type:用于标识节点的类型。它可以是类似“h1”“div”这样的标准 HTML 标签字符串,也可以是 React 组件类型 React fragment 类型。...null : config.__self; source = config.__source === undefined ? null : config....element = { // REACT_ELEMENT_TYPE是一个常量,用来标识该对象是一个ReactElement $$typeof: REACT_ELEMENT_TYPE, // 内置属性赋值...ReactDOM.render( // 需要渲染的元素(ReactElement) element, // 元素挂载的目标容器(一个真实DOM) container, // 回调函数

51830

jsx和React.createElement是什么关系?面试常问

图片需要注意的是:自定义组件时需要首字母用大写,会被识别出是一个组件,这是一个规定。小写默认会认为是一个html标签,编译成字符串。...type:用于标识节点的类型。它可以是类似“h1”“div”这样的标准 HTML 标签字符串,也可以是 React 组件类型 React fragment 类型。...null : config.__self; source = config.__source === undefined ? null : config....element = { // REACT_ELEMENT_TYPE是一个常量,用来标识该对象是一个ReactElement $$typeof: REACT_ELEMENT_TYPE, // 内置属性赋值...ReactDOM.render( // 需要渲染的元素(ReactElement) element, // 元素挂载的目标容器(一个真实DOM) container, // 回调函数

42220

React中的JSX原理渐析

我们来看看它打印出了什么: 这个时候我们可以看到,相对于普通dom节点。纯函数组件的不同点: $$typeof为Symbol(react.element)表示这个元素节点的类型是一个纯函数组件。...在普通dom节点中,type类型为对应的标签类型。而当为纯函数组件时。type类型函数自身。 组件的type类型,就是函数自身,这点很重要。...源生组件经过babel编译后的VDOM的type属性类型是一个字符串,表示当前元素的节点标签。 自定义组件经过编译后type指向自身的函数。...我们尝试访问这个属性来看看: 其实ts的类型提示已经告诉我们结果了,区分类组件函数组件的区别就是组件的原型上存在属性isReactComponent属性。...首先判断传入的type是否是函数,如果是函数那么无非两种类型。 接下来判断是否是class组件,因为我们之前已经给父的prototype上挂载了isReactComponent方法。

2.3K20

学习 React Native for Android:React 基础

最后的一个参数 callback 是可选的,用于指定该组件绘制更新完成后需要执行的回调。 某些教程会使用 React.render 来渲染页面,这个函数已经过时。...("div", { id: "greeting" }, React.createElement("h1", null, "Hello World!")...JSX 里约定分别使用首字母大、小写来区分本地组件和 HTML 标签。每个组件通常都会有一个 render() 函数,用于指定当调用 ReactDOM.render() 渲染该组件时的方式。...如果你需要返回一堆 div , 那你必须将你的组件用 一个div span 任何其他的组件包裹。...字符串改成通过组件属性来传递,这个过程就完成了视图和数据的 绑定 。 现在我们使用 react-devtool 来调试 React 程序,看看属性是如何被传入到组件里的。

9.2K20

小前端读源码 - React16.7.0(一)

函数,其中原生标签的类型,内容都变成了参数传入这个函数中。...函数有3个参数,分别是元素的类型,元素的属性,元素的innerText。...有兴趣可以自己去看babel对于class的转换,这里就不解析转换过程,总得来说就是返回一个App的够着函数传入到react.createElement中。...如果传入的react.createElement的type(第一个参数),如果是一个原生元素,那么将会是原生的tagName,是一个字符串,所以在react.createElement中尝试获取传入的type...是否存在defaultProps是获取不到的,只有type是一个函数,那么该函数的静态变量defaultProps才会被获取得到并且循环defaultProps对象将key和value保存到props中

41740

React 进阶 - JSX

( type, [props], [...children] ) createElement 的参数: type:元素类型 如果是组件类型,传入对应的函数 如果是 DOM 元素类型...,传入 div span 等字符串 props:元素属性 在组件类型中为 props 在 DOM 元素类型中为 attributes 标签属性 children:元素子节点 <TextComponent...类型 标签字符串,如 div fragment 类型 react element 类型 symbol react.fragment 类型 文本类型 字符串 无 数组类型 返回数组结构,里面的元素被 react.createElement...转换 无 组件类型 react element 类型 组件组件函数本身 三元运算 / 表达式 先执行三元运算,然后按上面规则转换 看三元运算结果的类型 函数执行 先执行函数,然后按上面规则转换 看函数执行结果的类型...export const ClassComponent = 1; // 组件 export const IndeterminateComponent = 2; // 初始化的时候不知道是函数组件还是组件

75010

为什么 JSX 语法这么香?

其实在 React 中并不会强制使用 JSX 语法,我们也可以使用 React.createElement 函数,例如使用 React.createElement 函数写这样一段代码。...), React.createElement("div", null, "Today is a fine day.") ); }}ReactDOM.render( React.createElement...更抽象一点来看,我们可以把组件区分为两:一是偏视图表现的 (presentational),一则是偏逻辑的 (logical)。我们推荐在前者中使用模板,在后者中使用 JSX 渲染函数。...这两组件的比例会根据应用类型的不同有所变化,整体来说我们发现表现组件远远多于逻辑组件。例如有这样一段模板语法。...]);但是不管是模板语法还是 JSX 语法,都不会得到浏览器纯天然的支持,这些语法最后都会被编译成相应的 h 函数(createElement函数,不泛指所有版本,在不同版本有差异)最后变成 JS 对象

1.3K40

React学习(三)-不可不知的JSX

其中,有下面几种不同的方法来传递子元素 字符串字面量 你可以将字符串放在开始和结束标签之间,此时 props.children就只是该字符串,对于内置的HTML元素是很有用的,同时要注意怎么接收这个内容...函数作为子元素 {}插值表达式内可以可以变量,字符串,普通HTML元素,甚至可以是组件,还可以是函数 import React from 'react'; import ReactDOM from '...>会被React转化生成相应的字符串 'div', 'span'传递给 React.createElement作为参数 大写字母开头的元素,我们将它视为自定义的组件,例如 ...,其实它最终也会被React.createElement函数作为转化 使用大写字母开头命名自定义组件,这是一种约定俗成的规定,本质上它就是一构造函数,是为了区别普通函数的,模拟的功能,Es6提供了的语法...,对象并没有数组的一些方法,通过Object.keys()进行转换,然后在使用.能够得到对象的属性以及属性值 也知道JSX中的何为prop,以及怎么去接收props值 对于label与input使用时,

1.3K30

第一篇:JSX 代码是如何“摇身一变”成为 DOM 的?

原因非常简单,我们来看一个相对复杂一些的组件的 JSX 代码和 React.createElement 调用之间的对比。...JSX 语法糖允许前端开发者使用我们最为熟悉的 HTML 标签语法来创建虚拟 DOM,在降低学习成本的同时,也提升了研发效率与研发体验。...1. type:用于标识节点的类型。...它可以是类似“h1”“div”这样的标准 HTML 标签字符串,也可以是 React 组件类型 React fragment 类型; 2. config:以对象形式传入,组件所有的属性都会以键值对的形式存储在...其实,相信你也已经发现了,createElement 中并没有十分复杂的涉及算法真实 DOM 的逻辑,它的每一个步骤几乎都是在格式化数据。

1.4K11
领券