最全的react视频【黑马程序员】--第五章 JSX语法
目录
1.JSX语法本质
2. 在JSX中混合写入js表达式
渲染类型
渲染数字
渲染字符串
渲染布尔值
为属性绑定值
渲染jsx元素
渲染 jsx元素的数组
将普通字符串数组转为jsx数组并渲染到页面上(两种方案)
3. react中key的作用
4. JSX语法注意事项
1.JSX语法本质
并不是直接把jsx渲染到页面上,而是内部转换成了createElement 形式,在渲染的;
ReactDOM.render(<div>123</div>, document.getElementById('app'))
上面的<div>123</div>是jsx语法,编译时会自动寻找第三方插件。
2. 在JSX中混合写入js表达式
- 在JSX语法中,要把js代码写到 { } 中
- jsx代码中的HTML标签必须遵循XML规范,
<hr/>
标签需要闭合
,必须是小写
渲染类型
渲染数字
index.js文件:
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'ReactDOM.render(<div>123</div>, document.getElementById('app'))
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'let a = 10
ReactDOM.render(<div>{a+5}</div>, document.getElementById('app'))
渲染字符串
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'let str = '你好,中国'
ReactDOM.render(<div>{str}
</div>, document.getElementById('app'))
渲染布尔值
{boo}不会在页面渲染,但不是报错;{boo.toString}会渲染出true;三目运算{boo?'真':'假'}可以渲染出真
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'let boo = true
ReactDOM.render(<div>{boo.toString()}<hr/>{boo ? '条件为真': '条件为假'}</div>, document.getElementById('app'))
为属性绑定值
<p title = {title}>p标签</p>不要写双引号
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'let title = '999'// 3. 使用render函数渲染 jsx xml 比 html 严格多了//总结:什么情况下需要使用 {} 呢? 当我们需要在 JSX 控制的区域内,写JS表达式,则需要把 JS代码写到 {}中
ReactDOM.render(<div><p title="ooo">这是p标签</p><hr/><p title= {title}>这是第二个p标签</p></div>, document.getElementById('app'))
渲染jsx元素
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'const h1 = <h1>红红火火开开心心</h1> //不要把它想象成标签,这是一个js对象// 3. 使用render函数渲染 jsx xml 比 html 严格多了//总结:什么情况下需要使用 {} 呢? 当我们需要在 JSX 控制的区域内,写JS表达式,则需要把 JS代码写到 {}中
ReactDOM.render(<div>{h1}
</div>, document.getElementById('app'))
渲染 jsx元素的数组
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'const arr =[ // 与jsx元素数组,每一项看成一个对象<h2>这是h2</h2>,<h3>这是h3</h3>
]// 3. 使用render函数渲染 jsx xml 比 html 严格多了//总结:什么情况下需要使用 {} 呢? 当我们需要在 JSX 控制的区域内,写JS表达式,则需要把 JS代码写到 {}中
ReactDOM.render(<div><hr/>{arr}</div>, document.getElementById('app'))
将普通字符串数组转为jsx数组并渲染到页面上(两种方案)
将字符串数组的每一项用标签包起来
方案一:在外部进行for循环:foreach
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'const h1 = <h1>红红火火开开心心</h1> //不要把它想象成标签,这是一个js对象
const arr =[ // 与jsx元素数组,每一项看成一个对象<h2>这是h2</h2>,<h3>这是h3</h3>
]const arrStr = ['毛利兰','赫曼','张三']//定义一个空数组,将来用来存放 名称标签
const nameArr = []
arrStr.forEach(item =>{const temp = <h5>{item}</h5>nameArr.push(temp)
})// 3. 使用render函数渲染 jsx xml 比 html 严格多了//总结:什么情况下需要使用 {} 呢? 当我们需要在 JSX 控制的区域内,写JS表达式,则需要把 JS代码写到 {}中
ReactDOM.render(<div>{arrStr}{nameArr}
</div>, document.getElementById('app'))
方法二:内部循环:map循环 (与foreach的区别是,map有返回值,foreach没有返回值是对元素的每一项进行操作)
//1. 导入包
import React from 'react'
import ReactDOM from 'react-dom'const h1 = <h1>红红火火开开心心</h1> //不要把它想象成标签,这是一个js对象
const arr =[ // 与jsx元素数组,每一项看成一个对象<h2>这是h2</h2>,<h3>这是h3</h3>
]const arrStr = ['毛利兰','赫曼','张三']//定义一个空数组,将来用来存放 名称标签
//方案一:在外部进行for循环
const nameArr = []
arrStr.forEach(item =>{const temp = <h5>{item}</h5>nameArr.push(temp)
})// //数组的map方法
// const result = arrStr.map(item => {
// return item + '~~'
// })
// console.log(result)//当map返回的只有一行时,可省略外面的大括号和return关键字
const result = arrStr.map(item => item + '~~')
console.log(result)// 3. 使用render函数渲染 jsx xml 比 html 严格多了//总结:什么情况下需要使用 {} 呢? 当我们需要在 JSX 控制的区域内,写JS表达式,则需要把 JS代码写到 {}中
ReactDOM.render(<div> {arr}<hr/>{arrStr}<hr/>{nameArr}<hr/>{arrStr.map(item => {return <h5>{item}</h5>})}
</div>, document.getElementById('app'))
3. react中key的作用
上面,我们将数组中的每一个对象渲染到页面上时,出现警告:
- 在react中,需要把 key 添加给 被 forEach 或者 map 或者 for 循环直接控制的元素 (最外层的元素),否者会有警告
const arrStr = ['英语','数学','地理','历史']
const namearr=[];
arrStr.forEach(item=>{const temp = <h5 key={item}>{item}</h5>;namearr.push(temp);
})
如果h5外面有一个div,则需要加给div
map函数使用:数组的map方法,map中必须写return
const arrStr = ['英语','数学','地理','历史']
const result= arrStr.map(item=>{return item+"~~";
})
console.log(result)
{arrStr.map(item => {return <h5 key={item}>{item}</h5>})}
4. JSX语法注意事项
- 在JSX中写注释:,推荐使用{/*这是注释*/},或者//
- 为JSX中的元素添加class类名:需要使用className代替class;htmlFor替换label中的for属性
- 在JSX常见DOM的时候,所有的节点,必须拥有唯一的根元素进行包裹
- 在JSX语法中,标签必须成对出现,如果是单标签,则必须自闭合
<p className="myele">111111111</p><label htmlFor="ooo"></label>
a. 当编译引擎,在编译JSX代码的时候
b .如果遇到<
那么就把它当做HTML代码去编译
c. 如果遇到了{}
就把花括号内部的代码当做普通JS代码去编译
总的代码:index.js
import React from 'react'
import ReactDOM from 'react-dom'//import CmtList from './components/CmtList'
// import BindEvent from '@/components/BindEvent'let a=10;
let str = '你好,中国';
let boo=true;
let title='9999';
const h1=<h1>红红胡奥胡奥</h1>
const h2=[<h1>这是h1</h1>,<h2>这是h2</h2>]const arrStr = ['英语','数学','地理','历史']
//定义一个空数组,将用来
const namearr=[];
// const result= arrStr.map(item=>{
// return item+"~~";
// })
// console.log(result)arrStr.forEach(item=>{const temp = <h5>{item}</h5>;namearr.push(temp);
})//3. 调用render函数渲染
ReactDOM.render(<div>
{a + 2}
<hr/>
{str}
<hr/>
{boo ? '条件真':'条件假'}
<hr/>
<p title={title}>这是p标签</p>
{h1}
<hr/>
{h2}
<hr/>
{namearr}
<hr/>
{arrStr.map(item=>{return <h3>{item}</h3>
})}s
</div>, document.getElementById('app'))
最全的react视频【黑马程序员】--第五章 JSX语法相关推荐
- HTML+CSS+JavaScript网页制作案例教程-黑马程序员-第五章课后习题(课程介绍专栏效果)
黑马程序员编著的教材 HTML+CSS+JavaScript网页制作案例教程 第五章:"课程介绍"专栏-课后习题参考代码 题目原型: 请结合给出的素材,运用列表标记,超链接标记以 ...
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述什么是会话技术? 2.简述Cookie与Session的区别?(至少写出3点) 3.请设 ...
- HTML+CSS+JavaScript网页制作案例教程-黑马程序员-第四章课后习题(播放器图标)
黑马程序员编著的教材 HTML+CSS+JavaScript网页制作案例教程 第四章:播放器图标-课后习题参考代码 ........ 记得 关注,收藏,评论哦,作者将持续更新.... 我自己做的效果 ...
- 黑马程序员——C语言基础---基础语法
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 黑马程序员--- c语言基础--基本语法
**第一讲 c语言概述** 一. 计算机和软件常识 1. 计算机运行原理 1) 硬件基本组成:硬盘.内存.CPU 2) 各个部件之间的运作协调 计算机只能识别0和1 1) 0和1组成的指令 2) 0和 ...
- 黑马程序员___Java基础[02-Java基础语法](一)
Java语言基础组成 一.关键字 1)定义:被Java语言赋予了特殊含义的单词 2)特点:关键字中所有字母均为小写 3)作用及分类: 下面是Java语言保留专用的50个关键字: 用于定义数据类型的关键 ...
- 黑马程序员C++第一章
第一章 1.书写Hello word 编写一个C++程序总共分为四个步骤: 创建项目 创建文件 编写代码 运行程序 2.注释-单行注释和多行注释 作用:在代码中多加一行说明和注释,方便自己或其他程序员 ...
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第六章 课后答案
所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.请简述JSP的运行原理. 1.请简述JSP中的9个隐式对象. 2.请使用include标签编 ...
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第四章 课后答案
所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述请求转发与重定向的异同?(至少写3点) 2.请写出禁止浏览器缓存页面的核心代码. 3.请 ...
最新文章
- 软件破解工具整理收集
- jsp页面中使用超链接标签a中的属性href和onclick同时触发怎么执行
- HDU4311(排序+二分)
- 数据结构题:克鲁斯卡尔(Kruscal)算法求最小生成树
- bzoj4152: [AMPPZ2014]The Captain
- jQuery跨域调用Web API
- 牛逼了 这 7 个 Python 入门实战项目,我打 99.99 分
- cojs EX_香蕉 题解报告
- python后台——asyncio,多进程+asyncio
- python试卷河南理工大学官网_河南理工大学试卷模板
- 电脑右键新建没有文本文档解决办法
- ultravnc中文版,不能错过的5款ultravnc中文版
- python-pptx替换ppt模板的文本
- Windows下设置桌面壁纸的代码(QT版)
- UDS诊断故障码及诊断服务介绍(14h, 19h, 85h)
- Java面试题(131-135)
- php天气城市切换怎么实现,PHP 调用接口生成天气预报 三级联动城市列表 仿中国天气网界面...
- 《如何获得真正的财富》精髓:选择比努力更重要,对于个人来说,选择了对的城市和对的行业,人生就成功了大半,对于企业来说,用最少的广告投入获得品牌知名度是获得财富的关键。
- 计算机教师格言座右铭,教师格言座右铭100句
- Git 学习笔记——程序员篇