1.由于通过creatElement()
方法创建的React元素有一些问题,代码比较繁琐,结构不直观,无法一眼看出描述的结构,不优雅,用户体验不爽;
2.概述:JSX是JavaScript XML
的简写,表示JavaScript代码中写HTML格式代码;
3.优点:声明式语法更加直观,与HTML结构相同,降低学习成本,提高开发效率;
1.react元素的属性名使用驼峰命名法;
2.特殊属性名:class->className, for -> htmlFor, tabindex -> tabIndex
;
3.如果没有子节点的React元素可以使用/>
来结束;
4.推荐使用小括号包裹JSX,从而避免js中自动插入分号报错;
原因:
1.JSX不是标准的ECMAScript语法,他是ECMAScript的语法扩展
2.需要使用babel编译处理后,才能在浏览器环境中使用;
3.create-react-app
脚手架中已经默认有该配置,无需手动配置
4.编译JSX语法的包: @bebel/preset-react
语法:{JavaScript表达式}
const name = 'Jack'
const age = 19
const title = (
<h1>
Hello,jsx,{
name},年龄:{
age}
</h1>
)
ReactDOM.render(title,document.getElementById('root'))
注意:
1.只要是合法的js表达式都可以进行嵌入;
2.JSX自身也是js表达式;
3.js中的对象是一个例外,一般只会出现在style属性中;
4.在{}中不能出现语句(比如:if/for
);
1.场景:loading效果;
2.if/else
3.三元运算符
4.逻辑与(避免使用,使用时注意下面的情况)
// 这种情况下 第二个分支也会打印数组的length0,所以尽量避免使用逻辑与来做条件渲染。即使使用,注意下这种情况
const isLoading = []
const loadData = () => {
return (
<div>
{
!isLoading.length && <div>loading...</div>}
{
isLoading.length && <div>数据加载完成,此处显示加载后的数据</div>}
</div>
)
}
1.如果需要渲染一组数据,应该使用数组map()方法;
2.渲染列表的时候需要添加key属性,key属性的值要保证唯一;
3.原则:map()遍历谁,就给谁加key属性;
4.尽量避免使用索引号作为key;
let arr = [{
id:1,
name:'小明'
},{
id:2,
name:'小红'
},{
id:3,
name:'张三'
},{
id:4,
name:'李四'
}]
let ul = (<ul>
{
arr.map(item => <li key={
item.id}>{
item.name}</li>)}
</ul>)
ReactDOM.render(ul,document.getElementById('root'))
在style里面通过对象的方式传递数据,行内样式比较麻烦,不方便阅读
<li key={
item.id} style={
{
'color':'skyblue','backgroundColor':'green'}}>{
item.name}</li>
//创建css文件编写样式代码
.box {
text-align:center
}
//在js中引入,然后设置类名
import './css/index.css'
<li className='box' key={
item.id} style={
{
'color':'skyblue','backgroundColor':'green'}}>{
item.name}</li>