React中JSX的使用(嵌入式js表达式,条件渲染,列表渲染,样式处理)

JSX的基本使用

1.jsx产生原因及概述

1.由于通过creatElement()方法创建的React元素有一些问题,代码比较繁琐,结构不直观,无法一眼看出描述的结构,不优雅,用户体验不爽;

2.概述:JSX是JavaScript XML的简写,表示JavaScript代码中写HTML格式代码;

3.优点:声明式语法更加直观,与HTML结构相同,降低学习成本,提高开发效率;

2.JSX语法

2.1 JSX注意点和在脚手架中使用JSX原因

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

2.2嵌入式js表达式

语法:{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);

2.3 条件渲染

1.场景:loading效果;

2.if/else

3.三元运算符

4.逻辑与(避免使用,使用时注意下面的情况)

// 这种情况下 第二个分支也会打印数组的length0,所以尽量避免使用逻辑与来做条件渲染。即使使用,注意下这种情况
const isLoading = []
const loadData = () => {
     
	return (
		<div>
			{
     !isLoading.length && <div>loading...</div>}
			{
     isLoading.length && <div>数据加载完成,此处显示加载后的数据</div>}
		</div>
	)
}

2.4 列表渲染

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'))

2.5 样式处理

2.51行内样式 -style

在style里面通过对象的方式传递数据,行内样式比较麻烦,不方便阅读

<li key={
     item.id} style={
     {
     'color':'skyblue','backgroundColor':'green'}}>{
     item.name}</li>
2.52类名 -className
//创建css文件编写样式代码
.box {
     
    text-align:center
}
//在js中引入,然后设置类名
import './css/index.css'
<li className='box' key={
     item.id} style={
     {
     'color':'skyblue','backgroundColor':'green'}}>{
     item.name}</li>

你可能感兴趣的:(React,reactjs)