首页 > 其他分享 >#yyds干货盘点# react笔记之学习之state注意事项

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

时间:2022-12-14 19:32:32浏览次数:61  
标签:yyds setCounter react 修改 state user 组件 setState

前言

我是歌谣 我有个兄弟 巅峰的时候排名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;

标签:yyds,setCounter,react,修改,state,user,组件,setState
From: https://blog.51cto.com/u_14476028/5938275

相关文章

  • react-pdf实现pdf预览
    实现了pdf翻页,放大,缩小,全屏展示,右键打印。实现代码:js:importReact,{useState,useEffect}from'react';importPropTypesfrom'prop-types';import{Spin,Too......
  • 社招前端二面react面试题集锦
    在哪个生命周期中你会发出Ajax请求?为什么?Ajax请求应该写在组件创建期的第五个阶段,即componentDidMount生命周期方法中。原因如下。在创建期的其他阶段,组件尚未渲染完成......
  • react的jsx和React.createElement是什么关系?面试常问
    1、JSX在React17之前,我们写React代码的时候都会去引入React,并且自己的代码中没有用到,这是为什么呢?这是因为我们的JSX代码会被Babel编译为React.createElement,我们来......
  • #yyds干货盘点#聊聊vuex的Mutations和Actions
    首先讲讲版本问题,如果使用​​vue-cli2​​模版搭建的基础项目,注意,如果使用​​vue​​版本是2,当你你默认安装​​vuex​​肯定是​​4.x​​版本了,这里需要注意的是,你要降......
  • #yyds干货盘点#JS数据类型判断几种方式
     一般JS检测数据类型有4种方法:typeof、constructor、instanceof和Object.prototype.toString,相信大家也对这几种判断很熟悉,下面我再罗列两种,供各位使用。​typeof:检测基......
  • React报错之Too many re-renders
    总览产生"Toomanyre-renders.Reactlimitsthenumberofrenderstopreventaninfiniteloop"错误有多方面的原因:在一个组件的渲染方法中调用一个设置状态的函数......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-自定义导航栏功能的实现
    前言导航栏是指位于页面顶部或者侧边区域的,在页眉横幅图片上边或下边的一排水平导航按钮,它起着链接站点或者软件内的各个页面的作用。小程序原生导航栏的限制除了胶囊按......
  • antd 配置了@craco/craco后react-scripts报错问题
    react安装了antd配置了@craco/craco后运行yarnstart后直接报错:Cannotfindmodule'react-scripts\package.json'Requirestack:/*package.json*/"scripts":{-......
  • #yyds干货盘点# LeetCode程序员面试金典:环路检测
    题目:给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点​。若环不存在,请返回 null。如果链表中有某个节点,可以通过连续跟踪 next​ 指针再次到达,则链表中存在......
  • #yyds干货盘点# 名企真题专题: 二分查找
    1.简述:描述对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。给定一个整数数组A及它的大小n,同时给定要查找的元素val,......