前端基础之《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))

相关推荐
数据知道3 分钟前
AES 加密实战——模式选择(ECB/CBC/GCM)与安全陷阱
前端·网络·安全
一夜枫林22 分钟前
vue实现scroll-view上下滑动右侧左右滑动
前端·javascript·vue.js
苏三的开发日记1 小时前
npm EPERM:无法写入 `.npmrc` 的排查与解决
前端
YWL1 小时前
OpenLayers地图分享:URL参数同步+分享链接生成,让用户一键分享地图视角
前端·javascript·vue·openlayers
枫叶梨花1 小时前
Electrobun透明窗口在Windows上的输入穿透排查
前端·electron·bun
云上工程笔记2 小时前
AstraFlow + React/Vite:如何用自然语言开发并部署一个 AI 咖啡网站原型
前端·人工智能·react.js
Q一件事3 小时前
ArcGIS中TypeError: can‘t multiply sequence by non-int of type ‘str‘错误
前端·javascript·arcgis
美狐美颜SDK开放平台3 小时前
从视频处理到实时渲染:直播APP中视频美颜SDK的关键技术解析
前端·人工智能·架构·实时互动·音视频·视频美颜sdk
yume_sibai3 小时前
ES6 核心知识点完全总结(变量 + 箭头函数 + 解构 + Promise + 模块化)
前端·ecmascript·es6
Moment4 小时前
为什么市面上的 coding agent 大多数都基于Nodejs?
前端·后端·面试