只需5分钟教会你使用React中的JSX

JSX的基本使用

createElement()的问题

在这里插入图片描述

  • 编写繁琐不简洁
  • 非常的不直观,无法直接看出结构
  • 不优雅,用户体验不好
  • JSX写法
    在这里插入图片描述

JSX简介

JSX是Javascript的一种语法拓展
JSX是JavaScript XML简写,表示在JavaScript中编写XML格式代码(也就是HTML格式)

优势:

  • 声明式语法更加直观
  • 与HTML结构相同
  • 降低了学习成本、提升开发效率

JSX是react的核心

使用

  • 使用JSX语法创建react元素
const title = <h1 >HELLO</h1>
  • 使用ReactDOM.render()方法渲染react到页面中
ReactDOM.render(
  title,
  document.getElementById('root')
);

在这里插入图片描述
在这里插入图片描述

注意点

  • React元素的属性名使用驼峰命名法
  • 特殊属性名:class -> className、for -> htmlFor、tabindex-> tablndex

class属性:
在这里插入图片描述

  • 没有子节点的React元素可以使用<span/>结束
    在这里插入图片描述
  • 使用小括号包裹JSX,从而避免JS中的自动插入分号陷阱(推荐)
    在这里插入图片描述

JSX中使用JavaScript表达式

嵌入JS表达式

  • 数据储存在JS中
  • 语法:{JavaScript表达式}
  • 注意:语法中是单花括号,不是双花括号
const name = '张三'

const title = (
  <h1 className="title">
    HELLO {name}
  </h1>
)

在这里插入图片描述

注意

  • 单花括号中可以使用任意的JavaScript表达式
const title = (
  <h1 className="title">
    <p>{1}</p>
    <p>{1 + 1}</p>
    <p>{'HELLO'}</p>
    <p>{10 < 5 ? '是的' : '不是'}</p>
  </h1>
)

在这里插入图片描述

  • JSX自身也是JS表达式
const p = (
  <p>
    HELLO
  </p>
)
const title = (
  <h1 className="title">
    {p}
  </h1>
)

在这里插入图片描述

  • JS中的对象是一个例外,一般只会出现在style属性中
  • 不能在{}中出现语句(例如:if/for等等)

JSX条件渲染

  • 场景:文字的显示不同
  • 根据条件渲染特定的JSX结构
const isShow = false
const show = () => {
  if (isShow) {
    return <div>我是true</div>
  }
  return (<div> 我是false</div>)
}
const title = (
  <h1 className="title">
    {show()}
  </h1>
)

在这里插入图片描述
在这里插入图片描述
-可以使用id/else或三元运算符或逻辑与运算符实现

三元:

const isShow = true
const show = () => {
  return isShow ? (<div>我是true</div>) : (<div>我是false</div>)
}
const title = (
  <h1 className="title">
    {show()}
  </h1>
)

在这里插入图片描述
逻辑与:

const isShow = true
const show = () => {
  return isShow && (<div>显示</div>)
}
const title = (
  <h1 className="title">
    {show()}
  </h1>
)

在这里插入图片描述
在这里插入图片描述

JSX的列表渲染

  • 渲染一组数据,使用数组的map()方法
const names = [
  { id: 1, name: '张三' },
  { id: 2, name: '李四' },
  { id: 3, name: '王五' },
  { id: 4, name: '赵四' },
  { id: 5, name: '刘能' }
]
const title = (
  <ul className="title">
    {names.map(item => <li>{item.name}</li>)}
  </ul>
)

在这里插入图片描述
但是会有报错
在这里插入图片描述
意思就是没有key值 我们设置一下即可

const names = [
  { id: 1, name: '张三' },
  { id: 2, name: '李四' },
  { id: 3, name: '王五' },
  { id: 4, name: '赵四' },
  { id: 5, name: '刘能' }
]
const title = (
  <ul className="title">
    {names.map(item => <li key={item.id}>{item.name}</li>)}
  </ul>
)

在这里插入图片描述
此时就不报错了

  • 渲染列表时应该添加key属性,属性值要保证唯一
  • map()遍历谁,就给谁+key属性
  • 尽量避免使用索引号作为key值

JSX样式处理

  • 行内样式 ----style
const title = <h1 style={{ color: 'red', backgroundColor: '#000' }}>HELLO</h1>

在这里插入图片描述

  • 类名 — className(强烈推荐)

在这里插入图片描述

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David凉宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值