前端基础之《React(11)—state声明式》

一、如何定义state

1、在类组件中,在constructor()构造函数中使用this.state={}来定义

2、在函数式组件中,自React16.8以后,可以使用useState()来定义

二、如何使用state

1、在类组件中,通过this.state来访问声明式变量

javascript 复制代码
import { Component } from 'react';

class A extends Component {

    constructor(props) {
        super(props); // 调用父类的构造函数

        // 定义state
        this.state = {
            num: 1,
        };
    }
    
    // 类组件一定要有render方法,因为render返回值就是组件的DOM结构
    render() {

        // 建议在类组件中解构state
        const { num } = this.state;
        
        return (
            <div>
                <h1>类组件</h1>
                <h1>{ num }</h1>
            </div>
        );
    }
}

export default A;

2、在函数式组件中,直接访问useState的结果

三、如何正确地修改state声明式变量

1、在类组件中,使用专属方法this.setState()来修改

2、在函数式组件中,使用useState()返回值的第二个参数来修改

3、this.setState两种写法

(1)this.setState({}),对象语法

(2)this.setState((state,props)=>{}) ,回调函数语法

(3)例子

javascript 复制代码
    // 自定义方法
    add () {
        // 这种写法是没问题的,但不够优雅。因为你要修改的state新值是由旧值计算而来的
        // 所以建议使用函数式写法,this.setState((state,props)=>{})
        // 用旧值state参与运算,得到新值
        this.setState({
            num: this.state.num + 1, 
        });
    }

4、this.setState是异步的,所以有第二个参数callback,表示声明式变量修改已完成

this.setState({}, callback)

this.setState((state,props)=>({}, callback))

相关推荐
石小石Orz12 分钟前
我发现了开发者AI产品营收的新方向
前端·虚拟现实
老马识途2.022 分钟前
关于跨域问题的总结
java·前端
别惊醒渔人2 小时前
Vue3 Diff 优化:最长递增子序列 LIS
前端·javascript·vue.js
颜酱2 小时前
07 | 把字段与指标同步到 Qdrant(生成阶段)
前端·人工智能·后端
用户059540174463 小时前
把AI长期记忆测试从手动验证换成pytest,2天揪出11个隐藏Bug
前端·css
lichenyang4534 小时前
从 Vite 空项目到 AIGC 图片工作台:我如何打通生图、任务轮询、生成库与 Canvas 动态特效
前端·人工智能
泡沫冰@4 小时前
上章节中文件的讲解
前端·网络·nginx
进击的丸子4 小时前
APP人脸识别增值版Harmony Demo实操与关键代码解析
前端·程序员·harmonyos
a1117765 小时前
唯美花朵风格的黑胶唱片音乐播放器
前端·css·css3
Hilaku5 小时前
工作 5 年后,决定你薪资上限的究竟是什么?
前端·javascript·程序员