专业的编程技术博客社区

网站首页 > 博客文章 正文

react基础知识总结

baijin 2025-03-12 12:11:13 博客文章 78 ℃ 0 评论

下面总结一下知识点,便于查看:

1.事件

2.表单

3.setState

4.生命周期

5.函数组件

6.非受控组件

7.Portals

8.context

9.异步组件

10.性能优化

11.高阶组件HOC

12.Render Props


事件

1.使用bind


import React from 'react'

class EventDemo extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            name: 'zhangsan',
        }

        // 修改方法的 this 指向
        this.clickHandler1 = this.clickHandler1.bind(this)
    }
    render() {
        // // this - 使用 bind
        return 

{this.state.name}

} clickHandler1() { console.log('this....', this) // this 默认是 undefined this.setState({ name: 'lisi' }) } } export default EventDemo

2.使用静态方法


// this - 使用静态方法
return 

clickHandler2 {this.state.name}

// 静态方法,this 指向当前实例 clickHandler2 = () => { this.setState({ name: 'lisi' }) }

3.event


click me

// 获取 event
clickHandler3 = (event) => {
    event.preventDefault() // 阻止默认行为
    event.stopPropagation() // 阻止冒泡
    console.log('target', event.target) // 指向当前元素,即当前元素触发
    console.log('current target', event.currentTarget) // 指向当前元素,假象!!!

    // 注意,event 其实是 React 封装的。可以看 __proto__.constructor 是 SyntheticEvent 组合事件
    console.log('event', event) // 不是原生的 Event ,原生的是 MouseEvent
    console.log('event.__proto__.constructor', event.__proto__.constructor)

    // 原生 event 如下。其 __proto__.constructor 是 MouseEvent
    console.log('nativeEvent', event.nativeEvent)
    console.log('nativeEvent target', event.nativeEvent.target)  // 指向当前元素,即当前元素触发
    console.log('nativeEvent current target', event.nativeEvent.currentTarget) // 指向 document !!!

    // 1. event 是 SyntheticEvent ,模拟出来 DOM 事件所有能力
    // 2. event.nativeEvent 是原生事件对象
    // 3. 所有的事件,都被挂载到 document 上
    // 4. 和 DOM 事件不一样,和 Vue 事件也不一样
}

结果如下:

表单

受控组件:通过change事件来改变state

import React from 'react'

class FormDemo extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            name: 'curry',
            info: '个人信息',
            city: 'beijing',
            flag: true,
            gender: 'male'
        }
    }
    render() {

        // // 受控组件
        // return 
//

{this.state.name}

// {/* 用 htmlFor 代替 for */} // //
// textarea - 使用 value return
最近发表
标签列表