react学习——state状态及事件处理

本文详细介绍了React中的状态(state)管理,包括状态的定义、修改以及异步处理。同时,探讨了React的事件处理机制,解释了为何在类组件中使用箭头函数以及如何改变`this`的指向。此外,还讨论了事件传参的不同方法和一个简单的todos应用示例。
摘要由CSDN通过智能技术生成

状态 state

  • react中的内置属性
    在类里面定义变量 对象
import React, {
    Component } from 'react'
// state 状态  类似于 Vue 中的 data
export default class App extends Component {
   
  // 直接是一个对象
  state = {
   
    msg: '😀'
  }
  render() {
   
    return (
      <div>
        <h1>{
   this.state.msg}</h1>
      </div>
    )
  }
}
  • 插件 react 里面的 dev-tools
    在这里插入图片描述
  • react里面内置了一个 setState方法
    实质是——重新执行了render方法,模板重新编译了一次,里面有diff算法,没更改的不会替换。后面讲。
  • react 改变视图的最简单的方式。
  • 例子1:App.js
import React, {
    Component } from "react";
export default class App extends Component {
   
  state = {
   
    msg: "😀",
  };
  // 使用箭头函数,没有this的问题
  handleClick = () => {
   
    // 直接改变state中的值是不会变化的
    // this.state.msg="📕"
    // console.log('消息未改变',this.state.msg);

    // 改变视图,有一个方法,直接用即可
    // 调用后,小括号中是一个对象
    // this.setState({})
    this.setState({
   
      msg: '🍉'
    })
    // 此时页面上和控制台里都变了
  };
  render() {
   
    return (
      <div>
        <h1>{
   this.state.msg}</h1>
        <button onClick={
   this.handleClick}>消息改变</button>
      </div>
    );
  }
}

状态定义的两种方式

1.类属性的方式

  • 直接是类属性的方式
  state = {
   
    msg: "😀",
  };

2.构造函数中定义状态

  • 在构造函数中定义
constructor(props){
   
    super(props) //super是干嘛用的??
    this.state={
   
      msg:"哈哈"
    }
  }
  • 两种定义状态的方式不能同时使用,会被覆盖。

多个状态的改变 批量更新
在这里插入图片描述

修改状态的两种方式

  • 使用setState()方法后会重新渲染 render

1.setState()方法中传入对象

2.setState()方法中传入一个箭头函数

import React, {
    Component } from "react";
// 修改状态  的两种方式
export default class App extends Component {
   
  constructor(props){
   
    super(props) 
    this.state={
   
      msg:"哈哈"
    }
  }
  handleClick = () => {
   
    // 方式一 :在setState方法中传入对象,直接改变需要改变的值
    // this.setState({
   
    //   msg:'🍉'
    // })
    // 方式二 :传入一个箭头函数
    this.setState((preState)=>{
   
      // preState 是之前最新的值
      console.log(preState);
      // 箭头函数 return 一个对象,对象里面是改变的值
      return {
   
        msg:"🍉"
      }
    })
  };
  render() {
   
    return (
      <div>
        <h1>{
   this.state.msg}</h1>
        <button onClick={
   this.handleClick}>消息改变</button>
      </div>
    );
  }
}

setState()方法是异步的,批量处理的,那么怎么同步使用?

小问题:打印出来的是原来的值还是修改后的值呢??

解释:

  • 之前的,做批量更新,异步执行的,所以this.setState()是异步的,打印是同步的。那么我想获得改变之后的值呢??

获取改变之后的值有两种方式

1. 第一种方法 放在setTimeout 中执行 setState 获取到的值就是同步的了

2. 第二种方法 放在原生事件中 setState方法是同步的

import React, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值