美文网首页
Day2. JSX核心语法一, 跟着Demo入门JSX

Day2. JSX核心语法一, 跟着Demo入门JSX

作者: JackLeeVip | 来源:发表于2020-06-10 22:27 被阅读0次

一. Javascript类的定义

JS语法补充

  1. ES5中定义类
function Person(name, age) {
    this.name = name;
    this.age = age;
}

var p = new Person("why", 18);
console.log(p.name, p.age);
分析.png
  • class ES6开始才有的关键字
  1. ES6中通过class 创建类
class Person {
  // ES6中所有的类可以实现一个构造方法, 名字是固定的, new自动调用, 不能手动调用
  constructor(name, age) {
      this.name = name;
      this.age = age;
  }

  // 定义方法
  running() {
      console.log(this.name, this.age, "running");
  }
}

const p = new Person("why", 18);
console.log(p.name, p.age);
p.running();

 // this绑定题目
const func = p.running;
func();
//1. 能不能正常的调用方法? 可以.
//2. 这里打印的name age是什么? 报错信息
// undefined, 当前的this没有绑定任何东西, 没有绑定也没有隐式绑定

var obj = {
  name: "kobe",
  age: 40
}
func.call(obj);// call主动绑定this

let func2 = p.running;
//重新给func赋值
func2 = func2.bind(obj);// 明确的绑定obj
// 可以打印, 显示绑定
报错.png

二. JavaScript类的继承

  • 面向对象有三大特性: 封装/继承/多态
  • 继承: 1. 减少重复的代码 2. 多态的前提
  • JavaScript是一种弱类型的语言, 鸭子类型(看起来像是鸭子, 走起来像鸭子, 就是鸭子)
  • 不严格的要求传入的类型, 好处是灵活, 坏处是类型不安全
  • TypeScript越来越重要, 替代JavaScript的一个原因, 安全
class Person {
   constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  running() {
    console.log("running");
  }
}

class Student {
   constructor(name, age, sno) {
    this.name = name;
    this.age = age;
    this.sno = sno;
  }
}

class Teacher {
   constructor(name, age, title) {
    this.name = name;
    this.age = age;
    this.title = title;
  }
}

// 重复的代码非常多 => 继承
// 将公共的代码抽取到父类里面

=> 2.0版本, 继承

class Student2 extends Person {
  constructor(name, age, sno) {
    // 调用父类的构造方法
    super(name, age);
    this.sno = sno;
  }
}

const stu = new Student("why", 18, 110);
console.log(stu.name, stu.age, stu.sno);
stu.running();

class Teacher2 extends Person {
  constructor(name, age, title) {
    // 子类中是必须初始化父类对象, 不然有问题, 报错, 见图
    super(name, age);
    this.title = title;
  }
}

const stu = new Student("why", 18, 110);
console.log(stu.name, stu.age, stu.sno);
stu.running();

const teacher = new Teacher2("why", 18, 110);
console.log(teacher.name, teacher.age, teacher.title);
teacher.running();
子类中是必须初始化父类对象, 不然有问题.png
  • babel -> ES5 语法糖

三. React知识点, 两个案例, 对之前学的东西做个巩固

1. 电影列表

电影列表.png
  1. 引入依赖, 必须依赖三个东西
  • 把三个东西放在本地, 本地引入
    <script src="../react/react.development.js"></script>
    ...
  1. 编写React代码
<script type="text/babel">
  ReactDOM.render(要渲染的东西, document.getElementById("app"));
</script>
  • EMT语法, HTML基础知识
  • 真是开发中, 先从服务器获取, 存到某一个地方 this.state = {movies: []}
  • 先写死, 定义一组数据
  • for循环生成多个<li>, 多个<li>放到<ul>里面
const liArray = [];
//ES6语法 in拿到的是下表值
for (let movie of this.state.movies) {
  liArray.push( <li>{movie}</li>);
}
return (
  <div>
    <ul>
      {liArray}
    </ul>
  </div>
)
  • 还有一种办法, {}里面可以跟的是一个表达式
<ul>
  {
    
  }
</ul>

补充: 数组的高阶函数

  • map用的特别多, 必须掌握
  • names里面追加一个000
const names = ["aaa", "bbb", "ccc"];

// names.map(回调函数, 给前面的回调函数绑定this, 很少用到)
// forEch是做一个遍历 map映射

// 回调函数有3个参数
// 参数1: 执行时的对应元素
// 参数2: 对应的下标值
// 参数3: 完整的数组对象
const newNames = names.map((item, index, array) => {
  return item + "000"
})
console.log(newNames);
打印结果.png
  • map函数应用


    map函数应用.png
<ul>
  {
    this.state.miveis.map((item) => {
      return <li>{item}</li>
    })
  }
</ul>
  • React的自主性会更强
  • v-for 指令
  • Vue有一个缺点, 使用的一个模板, 相似的组件不单独抽成一个组件, 不好复用
  • React只需要抽成一个变量, 更灵活, 各有好处


    Vue模板.png

2. 计数器案例

计数器.png
  • 体验React

  • 每次创建都需要先引入三个文件, 比较多的重复的东西 => 搞一个公共的东西

  • 之后只要是新创建一个文件快速生成一个代码 => 代码片段, VSCode创建代码片段


    image.png
    image.png
  • 选择html片段

  • 规则有点麻烦, 键值对, 描述, 对象, 前缀, body数组双引号写, 手动太麻烦 => 一个网站
    转换网站

  • 绑定事件<button onClick={.increment}>

increment() {
  console.log("+1");  
  this.
  // this是一个正确的this吗? undefined
  //=> `{this.increment.bind(this)}`
  this.setState({
    counter: this.state.counter - 1
  })
}

decrement() {
    console.log(-1);
}

this绑定.png
  • Component里面有个setState
  • 快捷键 ctrl + 点击

四. 认识JSX

1. 认识JSX的语法

  • 这段变量的声明右侧赋值的标签语法是什么?
// jsx语法, 没有三个引入会报错
const element <h2>Hello World</h2>

ReactDOM.render(element, cocument.getElementById("app"))
报错.png
JSX.png

为什么React选择了JSX?

  • 看起来有点奇怪, html + js 融在一起, 不好的编程习惯, 结构要和样式分离, 低耦合 => React的设计哲学♂, all in js
  • React认为渲染逻辑本质上与其他的UI逻辑存在内在耦合
    -- 比如UI需要绑定事件(button a原生等等)
    -- 比如UI中需要展示数据状态, 在某些状态发生改变时, 有需要改变UI
  • 组合, 放到一个组件, Vue分离了, 看起来很清晰, 不灵活
  • 如果是单标签, 必须以/>结尾! 否则报错.
    image.png
    JSX语法小括号包裹起来任意换行, 看起来更清晰.png

jsx中的注释

  • 比较特殊
  • HTML < !-- 注释 -->
  • jsx:
//
cmd + / 注释被渲染出来了
=> 
{js表达式}
{/* 我是一段注释 */}
image.png

JSX嵌入数据

JSX嵌入数据.png
  • 在{}中可以正常显示的内容 String Number Array
  • 在{}中不能显示(忽略) null undefined Boolean
    test1: null,
    test2: undefined,
    test3: false,
  • 为什么不显示? React在设计的时候, 真是渲染内容时, 经常做一些判断, flag: true,三目运算符显示null还需要手动写成空字符串
  • 逻辑与 && flag && "你好啊"
  • 如何显示? 转换成字符串 String(null) this.state.test1 + ""
  • 对象不能作为jsx的子类, 放到jsx中展示
friend: {
  name: "kobe",
  age: 40
}

JSX嵌入表达式

  • 对象的解构 ES6语法
    const {firstname, lastname } = this.state;
  • 运算符表达式
  • 三目运算符


    image.png
  • 进行函数调用
getFullName() {
  // 不需要bind, 自己在调用
  // hooks不需要this, 社区沸腾
  // 很多还是用this, 类组件, 还是需要掌握, 蚂蚁金服开源的
  return this.state.firstname + " " + this.state.lastname;
}

ps: this公开课, 面试题的视频, 讲了两三个小时

链接: https://pan.baidu.com/s/1cHkGsDF1xB9mxnsqcmSLAw 
提取码: xnws
这个视频里面,前3天讲的this

coderwhy的React核心技术与开发实战课程链接

少年~来做同学呀~.png

相关文章

  • Day2. JSX核心语法一, 跟着Demo入门JSX

    一. Javascript类的定义 JS语法补充 ES5中定义类 class ES6开始才有的关键字 ES6中通过...

  • 跟随阮一峰的全栈之路

    Demo1 - Render JSX 在 React 中模板语法的高亮叫做JSX。它允许在JSX把HTML标签直接...

  • react-jsx

    jsx 是类似 js 模板语法 声明 jsx 使用 jsx jsx 语法 jsx 是 js 的语法扩展,在 jsx...

  • React笔记(核心概念部分)

    核心概念 1. JSX JSX是javascript的语法扩展,让我们可以在JS中编写常规html代码,在JSX中...

  • 005@关于JSX语法.md

    005@关于JSX语法 转(有所更改):React入门:关于JSX语法可以参考的资料:React.js学习笔记之J...

  • JSX核心语法

    JSX简介 这个html标签和js的结合体就是JSX,JavaScript的扩展语法。在React中JSX会被创建...

  • TypeScript基础入门之JSX(一)

    转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效...

  • React 笔记

    JSX React 采用jsx语法,需用bable.js转义. JSX 语法可以和html 混写. html以< ...

  • (React)认识React语法

    一、JSX语法 在React中,没有使用HTML标签来绘制UI,而是使用了JSX语法。 当然JSX语法中,也可以嵌...

  • react语法结构

    1.react JSX语法原理 react是函数式编程,使用jsx语法来渲染组件。jsx语法是合法的JavaScr...

网友评论

      本文标题:Day2. JSX核心语法一, 跟着Demo入门JSX

      本文链接:https://www.haomeiwen.com/subject/fmtmtktx.html