Jsx语法

200 阅读5分钟

React JSX语法

1 认识jsx

image.png

这段element变量的声明右侧赋值的标签语法是什么呢?

  • 其实是不可以的,如果我们将 type="text/babel" 去除掉,那么就会出现语法错误
  • 它到底是什么呢?其实它是一段jsx的语法

它是什么呢

  • JSX是一种JavaScript的语法扩展(eXtension),也在很多地方称之为JavaScript XML,因为看起就是一段XML语法;
  • 它用于描述我们的UI界面,并且其完成可以和JavaScript融合在一起使用;
  • 它不同于Vue中的模块语法,你不需要专门学习模块语法中的一些指令(比如v-for、v-if、v-else、v-bind)

为什么React选择了JSX

  • React认为渲染逻辑本质上与其他UI逻辑存在内在耦合
  • 他们之间是密不可分,所以React没有将标记分离到不同的文件中,而是将它们组合到了一起,这个地方就是组件(Component); 当然,后面我们还是会继续学习更多组件相关的东西;
  • 在这里,我们只需要知道,JSX其实是嵌入到JavaScript中的一种结构语法

JSX的书写规范:

  1. 只能有一个根元素
  2. jsx结构通常回包裹一个(),将jsx当做一个整体
  3. jsx可以是单标签,也可以是双标签,但是单标签必须以/>结尾

2 JSX的使用

  • JSX嵌入变量作为子元素
  1. 情况一:当变量是Number、String、Array类型时,可以直接显示
  2. 情况二:当变量是null、undefined、Boolean类型时,内容为空;(直接给你忽略)
    • 如果希望可以显示null、undefined、Boolean,那么需要转成字符串;
    • 转换的方式有很多,比如toString方法、和空字符串拼接,String(变量)等方式;
  3. 情况三:Object对象类型不能作为子元素(not valid as a React child)
  • JSX嵌入表达式
  1. 运算表达式
  2. 三元运算符
  3. 执行一个函数
  • jsx绑定属性 (统一使用{})进行绑定
  1. 比如元素都会有title属性
  2. 比如img元素会有src属性
  3. 比如a元素会有href属性
  4. 比如元素可能需要绑定class
  5. 比如原生使用内联样式style

3 this的绑定问题 与 事件绑定

  • 如果原生DOM原生有一个监听事件,我们可以如何操作呢?
  • 方式一:获取DOM原生,添加监听事件;
  • 方式二:在HTML原生中,直接绑定onclick;
  • 在React中是如何操作呢?我们来实现一下React中的事件监听,这里主要有两点不同 React 事件的命名采用小驼峰式(camelCase),而不是纯小写;
  • 我们需要通过{}传入一个事件处理函数,这个函数会在事件发生时被执行;

3.2 this的绑定问题

在事件执行后,我们可能需要获取当前类的对象中相关的属性,这个时候需要用到this 如果我们这里直接打印this,也会发现它是一个undefined 为什么是undefined呢?

  • 原因是btnClick函数并不是我们主动调用的,而且当button发生改变时,React内部调用了btnClick函数;
  • 而它内部调用时,并不知道要如何绑定正确的this;
  • 如何解决this的问题呢?
  • 方案一:bind给btnClick显示绑定this
  • 方案二:使用 ES6 class fields 语法  方案三:事件监听时传入箭头函数(个人推荐)
  • image.png

4 事件参数传递

4.1在执行事件函数时,有可能我们需要获取一些参数信息:比如event对象、其他参数

  • 情况一:获取event对象
  • 很多时候我们需要拿到event对象来做一些事情(比如阻止默认行为)
  • 那么默认情况下,event对象有被直接传入,函数就可以获取到event对象
  • 情况二:获取更多参数
  • 有更多参数时,我们最好的方式就是传入一个箭头函数,主动执行的事件函数,并且传入相关的其他参数
  • image.png
  • image.png

5 条件渲染

某些情况下,界面的内容会根据不同的情况显示不同的内容,或者决定是否渲染某部分内容

  • 在vue中,我们会通过指令来控制:比如v-if、v-show
  • 在React中,所有的条件判断都和普通的JavaScript代码一致
常见的条件渲染的方式有哪些呢
  • 方式一:条件判断语句 适合逻辑较多的情况
  • 方式二:三元运算符 适合逻辑比较简单
  • 方式三:与运算符&& 适合如果条件成立,渲染某一个组件;如果条件不成立,什么内容也不渲染

6 React列表渲染

  • 在React中并没有像Vue模块语法中的v-for指令,而且需要我们通过JavaScript代码的方式组织数据,转成JSX
  • 如何展示列表呢?
  • 在React中,展示列表最多的方式就是使用数组的map高阶函数
  • 很多时候我们在展示一个数组中的数据之前,需要先对它进行一些处理
  • 比如过滤掉一些内容:filter函数
  • 比如截取数组中的一部分内容:slice函数

7 购物案例

代码规范

image.png