1 React的相关概念与原理介绍

开发react必须依赖的三个库

  • react 包括react开发所必须的核心代码
  • react-dom react渲染在不同平台所需要的核心代码
  • babel 将jsx的语法转为React代码的工具

react最初想解决的问题:

  • 以组件的方式去一个各划分功能模块。
  • 组件内以JSX的方式来描述UI的样式和页面的结构,组件内以state来管理和维护组件的状态。
  • 当应用的状态发生改变时,通过setState来修改状态,状态发生变化时,UI界面会自动发生更新。

react案例的演示

  1. <srcipt type="text/babel">
  2. // 将数据定义到变量种
  3. let message = "hello react";
  4. // 通过ReactDom对象来渲染内容
  5. render()
  6. // 定义一个执行函数
  7. function btnClick() {
  8. message = "hello react";
  9. render()
  10. }
  11. // 渲染方法
  12. function render() {
  13. ReactDOM.render((
  14. <div>
  15. <h2>{ message }</h2>
  16. <button onClick={ btnClick }>改变文本<button>
  17. </div>
  18. ), document.getElementById("app"))
  19. }
  20. </script>

2 JSX语法的介绍

  1. import React from "react"
  2. import { ReactDOM } from "react-dom"
  3. // 定义jsx的语法
  4. const element = <h2>我是用来测试的标题<h2>
  5. // 渲染数据
  6. ReactDOM.render(element, doucment.getElementById("app"))

2.1 JSX是什么?

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

    2.2 JSX的书写规范

  • JSX的顶层只能有一个根元素,所以我们很多时候会在外层包裹一个div原生(或者使用后面我们学习的Fragment)

  • 为了方便阅读,我们通常在jsx的外层包裹一个小括号(),这样可以方便阅读,并且jsx可以进行换行书写;
  • JSX中的标签可以是单标签,也可以是双标签;
    • 需要注意的是如果是单标签,必须以</>进行结尾,在jsx种,原生的html标签必须以</>进行结尾。

2.3 JSX中嵌入变量

  • 当变量是String,Number,Array时,可以直接显示

    1. // 当变量的值是array的时候 可以直接渲染在dom种
    2. constructor(props) {
    3. super(props)
    4. this.state = {
    5. str: "字符串",
    6. num: 12345678910,
    7. moives: ["数据1", "数据2", "数据3"]
    8. }
    9. }
    10. render() {
    11. return (
    12. <div>
    13. <h2>{ this.state.str }</h2>
    14. <h2>{ this.state.num }</h2>
    15. <h2>{ this.state.movies }</h2>
    16. </div>
    17. )
    18. }
  • 当变量是null、undefined、Boolean类型时,内容为空,但是渲染的外层的标签还在

    • 如果希望可以显示null、undefined、Boolean,那么需要转成字符串
    • 转换的方式有很多,比如toString方法、和空字符串拼接,String(变量)等方式
  • 对象类型不能作为子元素(not valid as a React child)
    • 对象类型的数据不能直接放在jsx的表达式中,因为它无法进行相应的计算,但是数组是可以的

2.4 JSX中插入表达式

jsx中是可以插入任何的js表达式的,在{}中可以直接进行使用。

  • 运算符表达式(&&的具体使用)
  • 三元运算符
  • 执行一个函数