【React】入门第五天 - state和refs

本文深入探讨了React中状态管理(state)的概念及其与props的区别,解析了state在组件内部的作用,以及如何通过setState更新状态并触发渲染。同时,详细介绍了Refs的三种使用方式,包括字符串、回调函数和React.createRef(),并提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

state

什么是state

state是状态

stateprops的区别

props是组件对外部的接口,如果子组件需要使用父组件的数据就可以通过props来进行数据传递,

state是组件对内的接口,组件自身可能有需要管理的数据,对管理数据的属性就是state

如果需要使用state 不能使用无状态组件

class MyComponent extends React.Component {
  constructor(props) {
      super(props)
    // state是可变的,props 是只读的
      this.state = {
          name : "react"
      }
  }

  // this.setState({key:value}) 是异步的,react 就会自动触发render进行数据的渲染
  render(){
      return ( <div>我是组件
              <button onClick= {()=>{this.setState({name:"vue"})}}>changeValue</button>
              <div></div>
              name :{this.state.name}
          </div> )
  }
} 

refs

refs: react当中提供了一个refs的数据 不能再无状态组件当中进行使用 因为无状态组件没有实例

表示当前组件的真正实例的引用 他会返回当前属性的元素

标识组件内部的元素

官方建议不要过度使用refs需要优先考虑state

refs三种方式使用

  1. 字符串
class MyComponent extends React.Component {

    fun = ()=>{
        console.log(this.refs.demoInput.value)
    }

    render (){
        return ( <div>
            我是一个组件
                <input type="text" ref="demoInput " placeholder = "请输入"/>
                <button onClick = {this.fun} >click me to get value</button>
            </div> ) 
    }
} 
  1. ref回调函数就是在dom节点上或者组件上挂载函数 函数的入参是dom 节点
class MyComponentB extends React.Component {
    fun = ()=>{
        console.log(this.inputValue.value)
    }

    render (){
        return ( <div>
            我是一个组件 回调
                <input type="text" ref={(input)=>{this.inputValue = input}} placeholder = "请输入"/>
                <button onClick = {this.fun} >click me to get value</button>
            </div> ) 
    }
} 
  1. React.createRef() (react 16.3新提供的方式)
// 把值付给一个变量,使用ref的current属性拿到这个节点
class MyComponentC extends React.Component {
    constructor(props){
        super(props)
        this.myRef =React.createRef()
    }

    fun = ()=>{
        console.log(this.myRef.current.value)
    }

    render (){
        return ( <div>
            我是一个组件 回调
                <input type="text" ref={ myRef } placeholder = "请输入"/>
                <button onClick = {this.fun} >click me to get value</button>
            </div> ) 
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值