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

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

前言

我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大不了从头再来 歌谣的意志是永恒的 放弃很容易 但是坚持一定很酷 微信公众号前端小歌谣 关注公众号带你进入前端学习交流群

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;
相关文章
|
2天前
|
前端开发 JavaScript 算法
react学习(1)
react学习(1)
110 66
|
16天前
|
JSON 前端开发 JavaScript
|
2天前
|
JavaScript 前端开发
react学习(3)创建虚拟dom的两种方式
react学习(3)创建虚拟dom的两种方式
|
2天前
|
前端开发
react学习(2)
react学习(2)
|
1天前
|
前端开发
react学习(6)
react学习(6)
|
1天前
|
前端开发 JavaScript
react学习(5)
react学习(5)
|
1天前
|
前端开发
react学习(4)
react学习(4)
|
18天前
|
前端开发 JavaScript 数据处理
如何学习React的高级概念?
【8月更文挑战第26天】如何学习React的高级概念?
27 2
|
18天前
|
前端开发 JavaScript API
学习 React 的方法
【8月更文挑战第26天】学习 React 的方法
28 1
|
28天前
|
前端开发 JavaScript API
React学习-初始化react项目
【8月更文挑战第16天】

热门文章

最新文章