reaccionar Día 02 componente jsx / estado del componente / representación de lista / juicio de condición

Preparación

  • Copie la carpeta pública, .babelrc, webpack.config.js, package.json, elimine los módulos relacionados con vue, instale dependencias
    Inserte la descripción de la imagen aquí
  • Pregunta: ¿Cuál es la redacción del elemento?

Reaccionar jsx

  • React usa JSX en lugar de js regular
  • JSX es una extensión de JavaScript que se parece mucho a XML
  • ¿Tengo que usar jsx?
  1. JSX funciona de manera eficiente porque está optimizado después de ser compilado en código js
  2. Escriba seguridad, se pueden encontrar errores durante la compilación
  3. Usar jsx para escribir plantillas es más simple y rápido
  • Pregunta: ¿Se pueden agregar los atributos de las etiquetas HTML de manera casual?
    Como jsx es realmente js, algunos identificadores como class y for no se recomiendan como nombres de atributos xml (class es la palabra clave de la clase, for es la palabra clave del bucle). En cambio, className y htmlFor se usan en ReactDOM para corresponder a la clase y para

className 和 htmlFor

  • Clase en jsx
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  • Escritura correcta
    Inserte la descripción de la imagen aquí
  • para en jsx (por ejemplo, en la etiqueta del formulario)
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  • Escritura correcta
    Inserte la descripción de la imagen aquí

expresión js

vue {{1 + 1}} // 2
reaccionar {1 + 1} // 2

Cómo escribir estilos en línea

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

escritura de comentarios jsx

  • Los comentarios deben escribirse en {}
    Comentarios de una sola línea Comentarios de
    varias líneas
    Inserte la descripción de la imagen aquí

Matriz

Inserte la descripción de la imagen aquí

  • No escribir un valor clave único advertirá
    Inserte la descripción de la imagen aquí

componente de reacción

  • Componentes funcionales-funciones de los js utilizados
  • Componentes de clase: clases que usan es6

Componente funcional

  • También llamados componentes UI, componentes sin estado
  • Solo responsable de la representación de datos
    Inserte la descripción de la imagen aquí
const HelloWorld = () => (<div>函数式组件</div>)

Componente de clase

Componentes universales
Use las clases en es6 para implementar componentes

Uso ES6 clase herencia a ser convertido en una clase normal de una clase de componentes reaccionan para
ser heredado de la clase padre usando el método de la render sección de retorno **, ** de JSX código
Inserte la descripción de la imagen aquí

Importación y exportación de componentes.

  • vue definir componente exportar componente importar componente registrar componente usar componente
  • reaccionar definir componente exportar componente importar componente usar componente
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  • ¿Qué pasa con los componentes funcionales?
    Inserte la descripción de la imagen aquí

Estado del componente

Componentes funcionales / componentes de clase Los componentes
funcionales también se denominan componentes de clase sin componentes

  • Repase las clases y la herencia de es6
class Student {
  // 构造方法  this 代表当前的实例
  // constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
  constructor (age,username) {
    this.age = age
    this.username = username
  }

  run () {
    console.log(this.username + '跑步')
  }
}

// const stu = new Student(18, 'zywoo')
// stu.run()

// Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多
// Pupil 和 Student 类一模一样
// class Pupil extends Student {}
// const stu = new Pupil(18, 'zywoo')
// stu.run()

// 子类添加自己的属性和方法
class Pupil extends Student {
  constructor (age, username, hobby) {
    // super 表示父类的构造函数,用来新建父类的this对象
    // 子类必须在constructor方法中调用super方法,否则新建实例时会报错
    // 因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象。
    // ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面(Parent.apply(this))。 -- 我是李刚的爸爸
    // ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。 -- 我爸是李刚
    super(age, username)
    this.hobby = hobby
  }

  run () {
    console.log(this.username + '玩' + this.hobby)
  }
}

const stu = new Pupil(18, 'zywoo', '篮球')
stu.run()
  • Estado del componente
    Inserte la descripción de la imagen aquí

Representación de la lista de componentes: transversal de una sola capa

  • El método de mapa devolverá una matriz, reaccionar expandirá la matriz por defecto
import React from 'react'
// 组件的状态
class HelloWorld extends React.Component{
  constructor (props) {
    super(props) // 继承了父类的属性和方法
    // 添加状态 - 得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法
    this.state = { // 添加当前组件的状态  ----  类似于vue的data
      message: 'hello world',
      list: [
        'html',
        'css',
        'js'
      ]
    }
  }
  render () {
    return (
      <div>
        <h1>{ this.state.message }</h1>
        <ul>
          {   // react 使用 map 遍历数据(通用)
            this.state.list.map((item, index) => {
              // item 代表的数据的每一个元素
              // index 代表索引值
              // 返回一段遍历之后的JSX语法代码
              // 遍历必写key,key具有唯一性 跟vue思想中保持一致
              return (
                <li key={index}>{ item }</li>
              )
            })
          }
        </ul>
      </div>
    )
  }
}

export default HelloWorld

Representación de la lista de componentes: transversal de varias capas

import React from 'react'
// 组件的状态
class HelloWorld extends React.Component{
  constructor (props) {
    super(props) // 继承了父类的属性和方法
    // 添加状态 - 得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法
    this.state = { // 添加当前组件的状态  ----  类似于vue的data
      message: 'hello world',
      list: [
        {
          a: 'html',
          arr: ['H5']
        },
        {
          a: 'css',
          arr: ['C3']
        },
        {
          a: 'js',
          arr: ['ES6','jQuery']
        },
      ]
    }
  }
  render () {
    return (
      <div>
        <h1>{ this.state.message }</h1>
        <ul>
          {   // react 使用 map 遍历数据(通用)
            this.state.list.map((item, index) => {
              // item 代表的数据的每一个元素
              // index 代表索引值
              // 返回一段遍历之后的JSX语法代码
              // 遍历必写key,key具有唯一性 跟vue思想中保持一致
              return (
                <li key={index}>web前端课程{ item.a }
                  <ol>
                    {
                      item.arr.map((itm, idx) => {
                        return (
                          <li key={idx}>{itm}</li>
                        )
                      })
                    }
                  </ol>
                </li>
              )
            })
          }
        </ul>
      </div>
    )
  }
}
export default HelloWorld

Juicio condicional

  • El juicio de condición de reaccionar es en realidad el juicio de condición de js
    Inserte la descripción de la imagen aquí
48 artículos originales publicados · Me gusta0 · Visitas 1747

Supongo que te gusta

Origin blog.csdn.net/ZywOo_/article/details/105417464
Recomendado
Clasificación