#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;
相关文章
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
233 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
230 0
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
258 1
|
前端开发
React组件实例更改state状态值(四)
【8月更文挑战第14天】React组件实例更改state状态值(四)
213 1
React组件实例更改state状态值(四)
|
前端开发 JavaScript
React组件实例state(三)
【8月更文挑战第14天】React组件实例state(三)
128 1
React组件实例state(三)
|
存储 前端开发 JavaScript
前端框架与库 - React基础:组件、Props、State
【7月更文挑战第12天】React是JavaScript库,专注UI构建,基于组件化。组件是UI模块,可函数式或类定义。Props是组件间安全传递数据的只读参数,用defaultProps和propTypes保证正确性。State则是组件内部可变数据,用于驱动更新。使用setState()确保正确变更和渲染。了解并妥善处理这些概念是高效React开发的基础。
234 7
|
前端开发
React使用hooks遇到的坑_state中的某几个属性数据变成了空字符
本文讨论了在React使用hooks时遇到的一个问题:state中的某些属性数据变成了空字符。作者通过在修改函数中重新解构赋值来获取最新的state值,解决了因数据更新不及时导致的问题。
202 0
|
前端开发 JavaScript Java
React 速通笔记
【7月更文挑战第17天】
220 1
|
JavaScript 前端开发 API
如何学习React.js?
【5月更文挑战第27天】如何学习React.js?
293 14
|
存储 前端开发
React 中的 state 和 props 有什么区别?
【8月更文挑战第31天】
395 0