程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

  • GO

  • 正则表达式

  • java

  • TypeScript

  • react

    • 组件
    • this指向
      • this指向
      • react中的this指向
      • react修改状态
      • 和vue数据更新的区别
      • react核心理念
    • 受控组件
    • 组件通信
    • 案例及同级组件通信
    • Props和插槽
    • 生命周期
    • 路由
    • 极客PC项目
    • 组件复用
    • hooks
    • hooks更多用法
    • Reudx
    • todo案例
    • react函数组件
    • 基本使用
  • 前端知识

  • jQuery

  • Python

  • C和C++

  • 前端和后端
  • react
yuadh
2022-08-02
目录

this指向

# this指向

var length = 10;
var obj = {
    length:20,
    sayHi(){
        console.log(this.length)
    }
}
obj.sayHi()
const fn = obj.sayHi()
fn()
var arr = [obj.sayHi,1,2]
arr[0]()
1
2
3
4
5
6
7
8
9
10
11
12

打印得结果为

  • 20 this指向的是obj,因为调用者是obj
  • 10 this指向的是window,因为调用者是window
  • 3 this指向的是arr,因为调用者是arr

# react中的this指向

在类组件中 render 的 this 指向当前组件

render() {
  const onClick = this.handleClick
  onClick()
  return (
    <div>
      <h1>XXX</h1>
      <div>{this.state.msg}</div>
      <div>{this.state.count}</div>
      <button onClick={this.handleClick}>点击事件</button>
    </div>
  )
}
handleClick() {
  console.log('233' + this)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

函数调用中的 this 因为没有定义所以是 undefined , 不知道谁是调用者

解决方案1

把函数调用包裹在箭头函数中

const onClick = () => this.handleClick()
onClick()
1
2

解决方案2

绑定 this

const onClick = this.handleClick.bind(this)
onClick()
1
2

解决方案3

class新语法:类实例语法

handleClick = ()=>{
    console.log(this)
}
1
2
3

此处是把函数写在了实例上,需要配合插件。。直接使用 js 可能无效

# react修改状态

  • 组件中的状态是可变的
  • 语法 this.setState({}) ,这个方法可以修改state同时可以更新UI
  • 不要直接修改 state 中的值
 render() {
    return (
      <div>
        <h1>XXX</h1>
        <div>{this.state.msg}</div>
        <div>{this.state.count}</div>
        <button onClick={this.handleClick}>点击事件</button>
      </div>
    )
  }
  handleClick = () => {
    this.setState({
      count: this.state.count + 1,
    })
  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 和vue数据更新的区别

vue: vue2会通过 es5 的语法 Object.defineProperty() vue3 会通过 es6 的 proxy 语法 检测到数据的变化,当数据变化的时候,vue 会帮助我们自动更新 DOM

react: react并不会去监听数据的变化,所以直接修改数据,react中的 DOM 不会自动更新,但是 react 提供了一个方法 setState() ,它可以做 1.修改 state 的值 2.更新 DOM

# react核心理念

状态不变

  • 不能直接修改 react 中的 state 的值,而是提供新的值覆盖
  • 直接修改 react 中的 state 的值,组件不会更新

同样的在修改对象类型的数据时,也是采用相同的方法覆盖其需要修改的值

clickFn = ()=>{
    this.setState({
        count:1,
        msg:'world',
        user:{
            ...this.state.user,
            name:'ls'
        },
        list:this.state.list.fitter(item=>item!=='ls')
    })
}
1
2
3
4
5
6
7
8
9
10
11
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
组件
受控组件

← 组件 受控组件→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×