#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;
相关文章
|
7月前
|
前端开发 JavaScript
React学习之——条件渲染
【10月更文挑战第16天】React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。
|
8月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
116 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
2月前
|
缓存 前端开发 JavaScript
学习React的最佳实践有哪些?
学习React的最佳实践有哪些?
|
2月前
|
前端开发 JavaScript API
如何快速学习React?
如何快速学习React?
|
8月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
82 0
|
6月前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
78 2
|
7月前
|
资源调度 前端开发 JavaScript
React进阶学习
React进阶学习
55 1
|
7月前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
77 1
|
7月前
|
JSON 前端开发 JavaScript
React 进阶阶段学习计划
React 进阶阶段学习计划
|
8月前
|
前端开发
React使用hooks遇到的坑_state中的某几个属性数据变成了空字符
本文讨论了在React使用hooks时遇到的一个问题:state中的某些属性数据变成了空字符。作者通过在修改函数中重新解构赋值来获取最新的state值,解决了因数据更新不及时导致的问题。
122 0