优势:声明式语法更加直观,与HTML结构相同,降低学习成本,开发效率。
jsx不是标准的js语法,是js的语法扩展,脚手架内置的@babel/plugin-transform-react-jsx包,用来解释该语法。
核心代码:
import ReactDOM from 'react-dom'
// 创建元素
const title = <h1 title="哈哈"></h1>
// 渲染元素
ReactDOM.render(title, document.getElementById('root'))
const name = 'zs'
const age = 18
const title = (
<h1>
姓名:{name}, 年龄:{age}
</h1>
)
const car = {
brand: '玛莎拉蒂'
}
const title = (
<h1>
汽车:{car.brand}
</h1>
)
const friends=['张三','李四']
const title=(
<h1>
汽车:{friends[1]}
</h1>
)
const gender=18
const title=(
<h1>
是否允许进入:{age>18?'是':'否'}
</h1>
)
function sayHi(){
return '王饱饱'
}
const title=<h1>姓名:{sayHi()}</h1>
const span=<span>我是一个span</span>
const title=<h1>JSX 作为表达式:{span}</h1>
- jsx中可以出现任意的js表达式
- 在jsx中只能出现js表达式,不能出现js语句,比如 if、for、while
- jsx中不能出现语句,这会导致代码出现错误
1.通过if/else渲染
const isLoding = false
const loadData = () => {
if (isLoding) {
return <div>数据加载中.....</div>
} else {
return <div>数据加载完成,此处显示加载后的数据</div>
}
}
const title = <div>条件渲染:{loadData()}</div>
const songs=[
{id:1,name:'痴心绝对'},
{id:2,name:'像我这样的人'},
{id:2,name:'南山南'}
]
const list=songs.map(song=>(<li>{song.name}</li>))
const dv={
<div>
<ul>{list}</ul>
</div>
}
直接在JSX中渲染
const songs=[
{id:1,name:'痴心绝对'},
{id:2,name:'像我这样的人'},
{id:2,name:'南山南'}
]
const dv={
<div>
<ul>{songs.map(song=><li>{song.name}</li>)}</ul>
</div>
}
遍历时添加key属性
const dv=(
<div>
<ul>
{songs.map(song=>(<li key={song.id}>{song.name}</li>))}
</ul>
)
- 列表渲染时应该给重复渲染的元素添加key属性,key属性
的值要保证唯一- key值尽量避免使用index下边
像width/height等属性,可以省略px,直接使用数值即可
如果是需要使用百分比的单位不变(60%)
1.行内样式-style
const dv=(
<div style={ { color:'red',backgroundColor:'pink'} }>style样式</div>
)
import './base.css'
const dv=<div className="title">style样式</div>