首页 > 其他分享 >react_hooks系列 useState

react_hooks系列 useState

时间:2023-12-11 19:57:14浏览次数:32  
标签:count React name hooks age react person useState

一、作用:

useState让函数式组件也可以处理状态。

二、格式:

1、定义状态:
const [状态名,更新状态的函数] = React.useState(初始值|函数);
​
如:
1)、基本类型的状态
声明一个新的叫做 “count” 的 state 变量,初始值为0 。
​
const [count, setCount] = React.useState(0); //useState函数返回的是数组
​
相当于类组件中的
this.state={
    count :0
}
​
2)、引用类型的状态
const [person, setPerson] = React.useState({name: '张三疯', age: 18,sex:"女"})
const [person, setPerson] = React.useState(() => ({name: '张三疯', age: 18,sex:"女"}))
​
2、读取值:
{count}
{person.name}   {person.age}
​
3、修改值:  
  setCount(5);
  //对于引用类型,不能局部更新(即:不能只改某个属性),所以,需要使用扩展运算符先拷贝以前所有的属性
  setPerson({
     ...person, //拷贝之前的所有属性
     age:person.age+1,
     name: '张四疯' //这里的name覆盖之前的name

注意:

首先,需要知道,函数式组件重新渲染时,会执行函数里的所有代码,

那么,当函数式组件重新渲染时,会不会再次把状态的值恢复成初始值呢?答案是:不会。后续组件重新渲染时,会使用最后一次更新的状态值

【官网解释: React 会确保 setState 函数的标识是稳定的,并且不会在组件重新渲染时发生变化 】

三、示例代码:

import React,{useState} from 'react';
function App() {
// 声明一个叫 "count" 的 state 变量
  const [count,setCount] = useState(0); //在App组件重新后,useState 返回的第一个值将始终是更新后最新的 count。return (
    <div className="App">
      <p>{count}</p>
      <input type="button" value="测试" onClick={()=>{setCount(count+1)}} />
    </div>
  );
}
对应的函数class组件:
class App extends React.Component {
  state = {
      count:0
  }
  render = () => (
    <div>
       <p>{this.state.count}</p>
       <input type="button" value="测试" 
            onClick={()=>this.setState({count:this.state.count+1})} />
    </div>
  )
}

我们之前把函数式的组件叫做“无状态组件”。但现在我们为它们引入了使用 React state 的能力。

function App() {
  const [person, setPerson] = React.useState({name: '张三疯', age: 18})
 
  const onClick = () =>{
    //setPerson不可以局部更新,如果只改变其中一个,那么整个数据都会被覆盖,所以,需要使用扩展运算符先拷贝以前所有的属性
    setPerson({
        ...person, //拷贝之前的所有属性
        age:person.age+1,
        name: '张四疯' //这里的name覆盖之前的name
    })
  }
  return (
    <div className="App">
        <p>name:{person.name}</p>
        <p>age:{person.age}</p>
        <input type="button"  value="测试" onClick={onClick} />
    </div>
  );
}

 

标签:count,React,name,hooks,age,react,person,useState
From: https://www.cnblogs.com/limou956259/p/17895419.html

相关文章

  • react_hooks系列 useEffect
    一、作用​可以使得你在函数组件中执行一些带有副作用的方法。​每当React组件更新之后,就会触发useEffect,在第一次的render和每次update后的useEffect触发,不用再去考虑“初次挂载”还是“更新”。React保证了每次运行effect的同时,DOM都已经更新完毕。......
  • react-query使用
    usequery const{isPending,isLoading,error,data}=useQuery({//返回当前请求的状态,错误信息,以及返回的数据queryKey:['repoData'],//【必填】,自定义查询的键,类型为数组,也可以存放变量,[repoData,id],当id发生变化时,会自动请求接口queryFn:()=>//......
  • Reactor模型
    目录1.Reactor模型是什么2.Reactor模型应用场景3.使用Reactor模型的软件4.Reactor模型与Actor模型的关系本文主要介绍Reactor模型基本概念以及应用场景。1.Reactor模型是什么Reactor模型是一种事件驱动的设计模式,用于处理服务请求,它是由一个或多个并发输入源同时发送给......
  • React 之 redux react-redux 使用
    注:官方推荐使用redux-toolkit1、项目准备创建项目npxcreate-react-app项目名称安装reduxnpminstall--saveredux安装react-reduxnpminstall--savereact-redux2、示例:Todo列表入口文件index.jsimportReactfrom"react";importReactDOMfrom"react-......
  • 记 react-redux redux-toolkit
    1、安装npminstall@reduxjs/toolkitreact-redux2、使用2.1创建一个ReduxStoreapp/store.jsimport{configureStore}from'@reduxjs/toolkit'exportconststore=configureStore({reducer:{},})2.2提供ReduxStore来Reactindex.jsimportReactfr......
  • React diff 算法详解
    代码参照React16.13.1什么是Diff在render阶段的beginWork函数中,会将上次更新产生的Fiber节点与本次更新的JSX对象(对应ClassComponent的this.render方法返回值,或者FunctionComponent执行的返回值)进行比较。根据比较的结果生成workInProgressFiber,即本次更新的Fiber节......
  • react antd table react-sortable-hoc DraggableBodyRow 拖拽及禁用指定行拖拽
    原文地址:基于antd树形表格table的拖拽排序效果实现-掘金(juejin.cn)思路片段:constDraggableBodyRow:React.FC<any>=({className,style,...restProps})=>{constindex=customInfoList.findIndex(({order:_index})=>_index===restProps['data-r......
  • React 中虚拟DOM是什么,为什么需要它?
    注意:本节主要讲React中的虚拟DOM,但是虚拟DOM并不是React中特有的内容。1.React中虚拟DOM是什么?虚拟DOM是对真实DOM的描述,虚拟DOM是JS对象,实际上就是JSX通过babel转换成React.createElement(),然后这个函数执行后变成的JS对象。关于JSX的介绍可以参考我的这篇文章JSX......
  • 2023最新高级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度react面试题合集问:如何实现React中的组件缓存策略?在React中,我们可以使用多种策略来实现组件的缓存,包括但不限于以下几种方法:使用React.memo()React.memo()是一个高阶函数,它可以接收一个组件作为参数,并返回一个新的组件。......
  • 2023最新初级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-初级难度react面试题合集问:请详述React.js是什么?React.js是一个由Facebook开发的开源JavaScript库,用于构建用户界面(UserInterface,UI)。它是目前Web开发领域最流行和广泛使用的库之一。React.js主要提供了一个虚拟DOM(Virtua......