一、JSX

用于描述UI的JavaScript扩展语法,是UI描述和UI数据之间的桥梁。

1,语法

JSX本质上还是JavaScript。

①基本语法和XML语法相同,都是使用成对的标签构成一个树状结构的数据。

const element = {
  <div>
     <h1>Hello,world</h1>
  </div>
}

②两种标签类型:dom类型的标签(首字母必须小写)和React组件类型的标签(首字母必须大写)。React通过首字母的大小写判断渲染的组件是DOM标签还是React类型的标签。

const elementDom = <h1>Hello,world</h1>;

const elementReact = <HelloWorld />;

const element = (
  <div>
    <HelloWorld />
  </div>
)

③JavaScript表达式

在JSX中使用表达式需要将表达式用大括号{}包起来、表达式在JSX使用场景有两个:

  • 通过表达式给标签属性赋值
  • 通过表达式定义子组件

JSX中只能使用JavaScript表达式,不能使用多行JavaScript语句。(可以使用三目运算符或逻辑与(&&)代替if语句的作用)

//通过表达式给标签属性赋值
const element = <User age={1+1} />;
//通过表达式定义子组件
const element = ( 
  <ul>
    {list.map((item) => <User name={item.name} age={item.age} />)}
  </ul>
)

//错误
const element = (
  <div>
    {
      if(complete) {
        return <User />;
      } else {
        return null;
      }
    }
  </div>
)

//正确
const element = (
  <div>
    {
      complete ? <User /> : null
    }
  </div>
)
const element = (
  <div>
    complete&&<User />
  </div>
)

④标签属性

  • JSX标签是DOM标签时,对应DOM标签支持的属性JSX也支持,例如id、class、style、onclick等,部分属性名称有所改变,例如class要写成className,事件属性名称采用驼峰命名法,例如onclick要写成onClick。
  • JSX标签是React标签时,可以任意自定义标签的属性名。

⑤注释需要用大括号{}包一下

2,JSX不是必需的(但应首选JSX语法)

JSX只是React.createElement(component,props,...children)的语法糖,所有的JSX语法最终都会被转换成对这个方法的调用。

//JSX语法
const element = <div className='foo'>Hello,world</div>

//转换后
const element = React.createElement('div',{className:'foo'},'Hello,React')

 

posted on 2022-10-19 10:51  Zoie_ting  阅读(68)  评论(0编辑  收藏  举报