#yyds干货盘点 react笔记之学习之state注意事项

简介: #yyds干货盘点 react笔记之学习之state注意事项

state注意事项

/* * state * - state实际就是一个被React管理的变量 * 当我们通过setState()修改变量的值时,会触发组件的自动重新渲染 * - 只有state值发生变化时,组件才会重新渲染 * - 当state的值是一个对象时,修改时是使用新的对象去替换已有对象 * - 当通过setState去修改一个state时,并不表示修改当前的state * 它修改的是组件下一次渲染时state值 * - setState()会触发组件的重新渲染,它是异步的 * 所以当调用setState()需要用旧state的值时,一定要注意 * 有可能出现计算错误的情况 * 为了避免这种情况,可以通过为setState()传递回调函数的形式来修改state值 * * */


代码案例

import './App.css';
import {useState} from "react";
const App = () => {
    console.log('函数执行了 ---> 组件创建完毕!');
    /*
    *   state
    *     - state实际就是一个被React管理的变量
    *         当我们通过setState()修改变量的值时,会触发组件的自动重新渲染
    *     - 只有state值发生变化时,组件才会重新渲染
    *     - 当state的值是一个对象时,修改时是使用新的对象去替换已有对象
    *     - 当通过setState去修改一个state时,并不表示修改当前的state
    *         它修改的是组件下一次渲染时state值
    *     - setState()会触发组件的重新渲染,它是异步的
    *           所以当调用setState()需要用旧state的值时,一定要注意
    *           有可能出现计算错误的情况
    *           为了避免这种情况,可以通过为setState()传递回调函数的形式来修改state值
    *
    * */
    const [counter, setCounter] = useState(1);
    const [user, setUser] = useState({name: '孙悟空', age: 18});
    const addHandler = () => {
        setTimeout(() => {
            // setCounter(counter + 1); // 将counter值修改为2
            setCounter((prevCounter)=>{
                /*
                *   setState()中回调函数的返回值将会成为新的state值
                *       回调函数执行时,React会将最新的state值作为参数传递
                * */
                return prevCounter + 1;
            });
            // setCounter(prevState => prevState + 1);
        }, 1000);
        // setCounter(2);
        // setCounter(3);
        // setCounter(4);
        // setCounter(5);
        // setCounter(6);
    };
    const updateUserHandler = () => {
        // setUser({name:'猪八戒'});
        // 如果直接修改旧的state对象,由于对象还是那个对象,所以不会生效
        // user.name = '猪八戒';
        // console.log(user);
        // setUser(user);
        // const newUser = Object.assign({}, user);
        // newUser.name = '猪八戒';
        // setUser(newUser);
        setUser({...user, name: '猪八戒'});
    };
    return <div className={'app'}>
        <h1>{counter} -- {user.name} -- {user.age}</h1>
        <button onClick={addHandler}>1</button>
        <button onClick={updateUserHandler}>2</button>
    </div>;
};
// 导出App
export default App;
相关文章
|
11天前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
32 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
18天前
|
前端开发 JavaScript
react学习(13)props
react学习(13)props
|
11天前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
21 0
|
23天前
|
前端开发 JavaScript
react学习(5)
react学习(5)
177 59
|
23天前
|
前端开发
react学习(7)
react学习(7)
115 45
|
11天前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
15 2
|
18天前
|
前端开发
react学习(17)回调形式的ref
react学习(17)回调形式的ref
|
14天前
|
前端开发
react学习(22)高阶函数和函数柯里化
react学习(22)高阶函数和函数柯里化
|
18天前
|
前端开发
react学习(15)函数式组件中使用props
react学习(15)函数式组件中使用props
|
18天前
|
存储 前端开发 容器
react学习(18)createRef形式的ref
react学习(18)createRef形式的ref

热门文章

最新文章

下一篇
无影云桌面