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

2020-06-10  本文已影响0人  JackLeeVip

一. 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
  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类的继承

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

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

1. 电影列表

电影列表.png
  1. 引入依赖, 必须依赖三个东西
  1. 编写React代码
<script type="text/babel">
  ReactDOM.render(要渲染的东西, document.getElementById("app"));
</script>
const liArray = [];
//ES6语法 in拿到的是下表值
for (let movie of this.state.movies) {
  liArray.push( <li>{movie}</li>);
}
return (
  <div>
    <ul>
      {liArray}
    </ul>
  </div>
)
<ul>
  {
    
  }
</ul>

补充: 数组的高阶函数

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
<ul>
  {
    this.state.miveis.map((item) => {
      return <li>{item}</li>
    })
  }
</ul>

2. 计数器案例

计数器.png
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

四. 认识JSX

1. 认识JSX的语法

// jsx语法, 没有三个引入会报错
const element <h2>Hello World</h2>

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

为什么React选择了JSX?

jsx中的注释

//
cmd + / 注释被渲染出来了
=> 
{js表达式}
{/* 我是一段注释 */}
image.png

JSX嵌入数据

JSX嵌入数据.png
friend: {
  name: "kobe",
  age: 40
}

JSX嵌入表达式

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
上一篇 下一篇

猜你喜欢

热点阅读