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

一. 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356