最全的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'))


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值