26 JSX深度剖析与使用技巧

React对JSX的处理

React.createElement有三个参数:标签类型,属性集合,子元素
JSX其实是React.createElement函数调用的语法糖
JSX → 编译 → React.createElement调用形式

class App extends React.Component {render() {return (<div className="box" id="J_Box"><h1 className="title">This is a <span>TITLE</span></h1></div>)}
}
ReactDOM.render(<App />,document.getElementById('app')
)

在这里插入图片描述

class App extends React.Component {render() {return /* @__PURE__ */ React.createElement("div", {className: "box",id: "J_Box"}, /* @__PURE__ */ React.createElement("h1", {className: "title"}, "This is a ", /* @__PURE__ */ React.createElement("span", null, "TITLE")));}
}

React元素类型

  • MyButton → 是React元素 → 也是React元素类型
  • 以JSX形式使用组件,则该组件必须存在于当前作用域
  • React.createElement拿到组件并实例化,拿到他的视图

如何在JSX中使用点语法

const colorSystem = {danger: 'red',info: 'gray',primary: 'blue',warning: 'orange'
}
const MyUI = {Button: class extends React.Component {render() {const { type, children } = this.propsreturn (<buttonstyle={{color: '#fff',backgroundColor: colorSystem[type]}}>{children}</button>)}}
}
class App extends React.Component {render() {return (<><MyUI.Button type="danger">Click</MyUI.Button><MyUI.Button type="info">Click</MyUI.Button><MyUI.Button type="primary">Click</MyUI.Button><MyUI.Button type="warning">Click</MyUI.Button></>)}
}
ReactDOM.render(<App />,document.getElementById('app')
)

在这里插入图片描述

class LoginBtnGroup extends React.Component {render() {return (<div><h1>请先登录</h1></div>)}
}
class WelcomeInfo extends React.Component {render() {return (<div><h1>HI {this.props.username}</h1></div>)}
}
class Header extends React.Component {static componets = {'login': LoginBtnGroup,'welcome': WelcomeInfo}render() {const HeaderUser = Header.componets[this.props.type]return (<HeaderUser{...this.props} />)}
}

在这里插入图片描述

JSX的props

JS表达式与语句

  • JSX大括号里可以传入任何js表达式
  • 但不可以传入语句如if、for、switch、function,非表达式可以在JSX大括号外面使用(如render里、return外)

在这里插入图片描述

字符字面量

  • 字符串字面量传入的props能显示特殊符号
  • JS表达式方式传入的props将原封不动的显示
    在这里插入图片描述
  • 字符串传入的意义是字符串本意,传入了字符串true,不代表Bool真假,隐式转换为真,但全等===true判断为假

authorShow ={ true }
JS表达式方式传入的props,在语义和逻辑上都代表Bool真假
a=“1” // 字符串1
a={1} // 数字1

在这里插入图片描述

  • 字符串字面量去除首位空格、换行
  • 字符串之间多个空格压缩为一个,加多个$nbsp;
  • 控制换行:<br/>
  • 要显示<>,使用字符实体&lt &gt
  • 在JS表达式里{'This is a <TITLE>'}可以渲染出<>
    在这里插入图片描述

剩余运算符

  • 剩余运算符展开props
  • 如果有不用的属性,先行解构,再展开余下的属性const { a,...others } = this.props
    在这里插入图片描述

返回一组JSX

在这里插入图片描述

子元素

  • 与运算控制逻辑,0是会渲染的,因此不走&&之后
  • 可以改为或运算
  • 或用length === 0判断
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript --- 数组实用小技巧

一个数组:[a,b,c,d,e],希望满足以下2个条件: 1.当索引在第0个位置的时候,数组为[b,c,d,e],在第1个位置的时候,数组为[a,c,d,e] … 2.若索引i 和 索引 j 的值相等,则只执行1次. 效果如下: nums [1,2,3,4] nums [1,1,1,2,2,3,4] 实现如下: let nums [1,1,1,2,2,3,4]; let le…

Http的持久连接和管线化

【要点】 1. 什么是持久连接&#xff1f; 2. 什么是管线化&#xff1f; 【总结】 1.什么是持久连接&#xff1f; (keep alive模式) HTTP1.1规定了默认保持长连接&#xff08;HTTP persistent connection &#xff0c;也有翻译为持久连接&#xff09;;数据传输完成了保持TCP连接…

Hexo 版本

Mac hexo s 启动Hexo服务报错如下&#xff1a; Error: The module /usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0dtrace-provider/build/Release/DTraceProviderBindings.node was compiled against a different Node.js version using NODE_MODULE_VERSION 48. T…

dart --- 简单的闭包

首先得明白下面2点: 全局变量的特点:常驻内存,污染全局变量局部变量的特点:会被垃圾回收机制回收,不会污染作用域… // 闭包.dart void main(){myClosure(){var a 0; // a是一个局部变量.函数执行完毕后将被清理return (){a;print(a);};}var fn myClosure();fn();fn();fn()…

27 JSX函数子元素的应用与思考

JSX的props.children和props本身有部分一致的特性 props.children可以传递任何类型的子元素 // 调用子元素回调 num 次&#xff0c;来重复生成组件 function Repeat(props) {// 返回一组JSXlet items [];for (let i 0; i < props.num; i) {items.push(props.children(i));…

Python学习day12(生成器,列表/生成器推导式)

Python学习day12(生成器&#xff0c;列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种&#xff1a;一种是调用方法直接返回的&#xff0c;一种是可迭代对象通过执行iter方法得到的&#xff0c;迭代器有的好处是可以节省内存。 如果在某些情况下&#xff0c;我们也…

Cascader 级联选择器

当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。 通过expand-trigger可以定义展开子级菜单的触发方式。 本例还展示了change事件&#…

es6 --- String.prototype.padStart

从实际出发理解. 首先看下面代码 // js var dt new Date(); console.log(dt);下面想把时间格式化,写一个dateFormat函数 // js function dateFormat(data){var dt new Date(data);var y dt.getFullYear();var m dt. getMonth() 1;var d dt.getDate();var hh dt.getHo…

1 redux初探、用react开发数值增值案例

含义 Redux是专门用作状态管理的js库&#xff0c;不是react插件库可以用在react、angular、vue等项目中能集中式管理react应用中多个组件共享的状态 使用 npx create-react-app redux1 cnpm install redux -S关键字 storereduceractionsubscribe 案例 1. 创建store、并传…

Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

Python学习笔记_1_基础_2&#xff1a;数据运算、bytes数据类型、.pyc文件&#xff08;什么鬼&#xff09; 一、数据运算 Python数据运算感觉和C&#xff0c;Java没有太大的差异&#xff0c;百度一大堆&#xff0c;这里就不想写了。比较有意思的是三元运算&#xff0c;记得C和Ja…

LeetCode 8. String to Integer (atoi)

问题链接 LeetCode 8. String to Integer (atoi) 题目解析 字符串转换成数字。 解题思路 个人认为题目并没有完全讲清楚题意。最初以为需要考虑多种情况&#xff0c;小数啊指数啊什么的&#xff0c;后面发现不是这样的&#xff0c;这题只要关注字符数字问题以及范围问题。 1.跳…

javascript --- 实战中体会jsonp

准备:1.需要node环境,node环境配置 -> 百度搜索 “node环境配置” (网上太多了) node是否安装成功指令如下: 创建如下页面结构: html结构如下: // jsonp.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

2 中间件的使用、异步action的创建

react-redux是react插件 将所有组件分成两大类&#xff1a;UI组件和容器组件 安装npm install react-redux -S UI组件&#xff1a; 只负责UI的呈现&#xff0c;不带有任何业务逻辑不使用this.state所有数据都由this.props提供不使用任何Redux的API&#xff0c;不需要使用store …

PHP数组函数

整理了一份PHP开发中数组操作大全&#xff0c;包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。 一、数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名ar…

Android Stadio 相关

这几天&#xff0c;电脑坏了。重装系统&#xff0c;慢慢的学到了很多Android stadio 的相关知识。总结一下吧&#xff1a; 1.gradle 编译工具&#xff1a;在工程的gradle/wrapper/gradle–wrapper.properties 里面设置gradle 的版本。 distributionUrlhttps://services.grad…

1 State Hook

Hook&#xff0c;使用在函数组件中不要在循环&#xff0c;条件或嵌套函数中(if、switch、for)调用 Hook 1. 函数指向相同的引用 更新方式&#xff1a;函数组件中state变化时才重新渲染&#xff08;React使用Object.is比较算法来比较state&#xff09;&#xff1b;而类组件每次…

⊰第五篇⊱ 队列

队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIFO。允许插入的一端为队尾&#xff0c;允许删除的一端为队头。队列不…

es6 --- 数组的扩展

经常遇到对数组的操作…下面是《ES6标准入门》(第3版)中对数组扩展的(部分)描述: 扩展运算符(…): console.log(...[1,2,3]) // 1 2 3console.log(1, ... [2,3,4], 5) // 1 2 3 4 5扩展运算符代替数组的apply方法 // ES5 function f(x,y,z) {// ... } var args [1,2,3]; f.a…

算法 - 排序稳定性总结

排序方式 时间复杂度 空间复杂度 稳定性 平均情况 最坏情况 最好情况 插入排序 O(n^2) O(n^2) O(n) O(1) 稳定 希尔排序 O(n^1.3) O(1) 不稳定 冒泡排序 O(n^2) O(n^2) O(n) O(1) 稳定 快速排序 O(nlogn) O(n^2) O(nlogn) O(logn) 不稳定 选择排…

node --- 实践中理解跨域

经常可以见到.说解决跨域只要返回加上"Access-Control-Allow-Origin"头部就行… 下面从实践中一步一步的理解. 1.环境准备: 1. node.js (http://nodejs.cn/) 自行下载配置, 完毕后(cmd)输入 node --version 若显示版本号则代表成功// ps: node(中的npm)方便下载资源…