类式组件三大核心属性

简介: 类式组件三大核心属性

1、state

state是组件对象最重要的属性,值是对象(可以包含多个key-value的组合)
组件被称为"状态机",通过更新组件的state来更新对应的页面显示(重新渲染组件)
用state来初始化状态,用setState这个API来对状态进行更改
最原始的写法:
对于类来说,状态一般是维护在constructor函数中的,对于继承的类来说,constructor函数可有可无,如果写了就一定要调用super方法

<script type="text/babel">
class Weather extends React.Component {
    constructor(props) {
       // 构造器调用几次 —— 1次
       super(props)
       // 初始化状态
       this.state = {isHot:true}
       // 解决changeWeather中this指向问题
       this.changeWeather = this.changeWeather.bind(this)
     }
     render() {
       // render调用几次 —— 1+n次 1是初始化的时候调用,n是状态更新的次数 
       // 读取状态
       const {isHot} = this.state
       return <h2 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'}</h2>
     }
     changeWeather() {
       // changeWeather调用几次 —— 点击几次调几次
       // changeWeather放在Weather的原型对象上,供实例使用
       // 由于changeWeather是作为onClick的回调,所以不是通过实例调用的,是直接调用
       // 类中方法默认开启了局部的严格模式,所以changeWeather中的this为undefined
    
       // 获取原来的isHot值
       const isHot = this.state.isHot
       // 严重注意:state不可直接更改,必须通过setState进行更新,且更新是一种合并不是替换
       this.setState({isHot:!isHot})
     }
    }
</script>

简写:

  <script type="text/babel">
    class Weather extends React.Component {
      // 类中可以直接写赋值语句,含义是给类的实例对象添加一个属性
      state = {isHot:true,wind:'微风'}
      render() {
        const {isHot,wind} = this.state
        return <h2 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h2>
      }
      // 自定义方法——要用赋值语句的形式+箭头函数
      changeWeather = () => {
        const isHot = this.state.isHot
        this.setState({isHot:!isHot})
      }
    }
  </script>

强烈注意点:

  • 组件render方法中this为组件实例对象
  • 组件自定义的方法中this为undefined,如果解决?

    • 强制绑定this,通过函数对象的bind
    • 箭头函数
  • 状态数据,不能直接修改或更新

2、props

每个组件对象都会有props属性,组件标签的所有属性都保存在props中
通过标签属性从组件外向组件内传递变化的数据,注意:组件内部不要修改props数据
1、基本使用

ReactDOM.render(<Person name="tom" age="18" sex="男" />, 

2、批量传递

 const p = {name:'老刘',age:18,sex:'男'}
 ReactDOM.render(<Person {...p} />,document.getElementById('test2'))

3、对props进行限制

     // 对标签属性进行类型、必要性的限制
    Person.propTypes = {
      name:PropTypes.string.isRequired, // 限制name必传且为字符串
      sex:PropTypes.string,
      age:PropTypes.number,
      speak:PropTypes.func, // 限制speak为函数
    }
    // 指定默认标签属性值
    Person.defaultProps = {
      sex:"男",
      age:18
    }

4、props的简写方式

<script type="text/babel">
    class Person extends React.Component {
      constructor(props) {
        // 构造器是否接收props,是否传递给super,取决于是否希望在构造器中通过this访问props
        super(props)
      }
      // 对标签属性进行类型、必要性的限制
      static propTypes = {
        name: PropTypes.string.isRequired, // 限制name必传且为字符串
        sex: PropTypes.string,
        age: PropTypes.number,
      }
      // 指定默认标签属性值
      static defaultProps = {
        sex: "男",
        age: 18
      }
      render() {
        const { name, age, sex } = this.props
        return (
          <ul>
            <li>姓名:{name}</li>
            <li>性别:{sex}</li>
            <li>年龄:{age + 1}</li>
          </ul>
        )
      }
    }

3、refs

1、字符串形式的ref

官方推荐尽量避免使用

<input ref="input1" type="text" placeholder="点击按钮提示数据" />
2、回调函数形式的ref

回调函数内联写法存在调用次数的问题,也可以把回调函数写出来,但是内联写法存在的问题基本可以忽略,开发中也常用

<input ref={c => this.input1 = c} type="text" placeholder="点击按钮提示数据" />

3、createRef
React.createRef()调用后可以返回一个容器,该容器可以存储被ref所标识的节点,但该容器是 "专人专用" 的

<script type="text/babel">
    class Demo extends React.Component {
      myRef = React.createRef()
      myRef2 = React.createRef()
      render() {
        return (
          <div>
            // 通过this.myRef.current.value拿到数据
            <input ref={this.myRef} type="text"/>
            <input ref={this.myRef2} type="text"/>
          </div>
        )
      }
    }
  </script>
相关文章
|
6天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
463 123
|
7天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
443 127
|
10天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
754 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
2天前
|
消息中间件 存储 Kafka
Kafka 原生消息入湖能力上线!一键打通实时流与数据湖
阿里云消息队列 Kafka 版正式上线原生消息入湖能力。
213 121
|
2天前
|
人工智能 安全 Cloud Native
Higress 新发布:AI Gateway 能力增强,Gateway API 及其推理扩展持续打磨
增强 AI 网关能力,持续打磨 Gateway API 及其推理扩展。
250 122
|
7天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
446 123
|
5天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
330 108
|
15天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)