位置: IT常识 - 正文

【React】组件三大核心属性(react组件框架)

编辑:rootadmin
【React】组件三大核心属性 📘前言

推荐整理分享【React】组件三大核心属性(react组件框架),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react 组件三种创建,react常用组件及作用,react组件定义,react 组件三种创建,react 组件三种创建,react 组件三种创建,react组件定义,react组件constructor,内容如对您有帮助,希望把文章链接给更多的朋友!

🚩🚩🚩 💎个人主页: 阿选不出来 💨💨💨 💎个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. 💨💨💨 💎目前开发的专栏: JS 🍭Vue🍭React🍭 💨💨💨

【React】组件三大核心属性📘前言📖1.state📑setState📖2.props📑对props进行限制📑对props设置默认值📑state与props的区别📖3.ref📖1.state

state是组件对象最重要的属性,值是对象(可以包含多个key-value的组合)。

组件被成为“状态机”,通过更新组件的state来更新对应的页面显示(重新渲染组件)。

一、定义state,访问state

写法一(常用、简写)

直接向class App添加state属性

import React, { Component } from 'react'export default class App extends Component { // ====定义state写法一==== state = { isCollect: false, myname:"Kerwin" } render() { return ( <div> <h1>欢迎来到react开发-{this.state.myname}</h1> </div> ) }}

写法二(了解)

使用构造器,初始化一个state属性

import React, { Component } from 'react'export default class App extends Component { // ====定义state写法二==== constructor(){ super() this.state = { isCollect:false, myname:"Kerwin" } } render() { return ( <div> <h1>欢迎来到react开发-{this.state.myname}</h1> </div> ) }

二、修改state

想要修改state中的数据,我们就需要自定义一个修改state的方法。

如何自定义这个方法并且调用?

关键点在于,this指向应为App这个类的实例对象

...render(){ {/* 法一 */} <button onClick={this.handleAddClick}>add</button> {/* 法二 */} <button onClick={this.handleDelClick(index)}>delete</button>}handleAddClick= ()=>{}handleDelClick(){}

如何修改state对象中的数据?

state状态数据,不支持直接修改或更新!需要借助setState!

📑setState

this.state 是纯js对象,在Vue中,data属性是利用object.defineProperty 处理过的,更改data的数据的时候会触发数据的getter和setter,但是React中没有做这样的处理,如果直接更改的话,react是无法得知的,所以,需要使用特殊的更改状态的方法 setState。

实例:

修改state.isHot 的值。

...state = {isHot: true,wind: '微风'}render(){ return ( <div> <h1 onClick={this.changeWeather}>天气:{this.state.isHot}-{this.state.wind}</h1> </div> )}...changeWeather = ()=>{ const isHot = this.state.isHot this.setState({isHot:!isHot})}...

此处state被修改后的结果为: state = {isHot: false, wind:'微风'}

setState可以更新state ,且更新是一种合并不是替换!

特别注意:不能直接修改状态(state),可能会造成不可预期的后果!

扩展:

假如state属性中存有一个数组,如何修改这个数组的值呢?

state = { list: ['aaa','bbb','ccc']}

切记不能写成这样!!

const newlist = this.state.listnewlist.push('ddd')

解决办法:

由于我们不能直接修改state中的数据,所以需要将 list 这个数组深复制一份,对复制得来的新数组进行修改并使用setState传入。

//法一const newlist = [...this.state.list]//法二const newlist = this.state.list.concat()//法三const newlist = this.state.list.slice()//...

setState更新状态不总是异步的。

【React】组件三大核心属性(react组件框架)

setState还接收第二个参数,第二个参数是回调函数,当状态和 dom更新完后就会被触发。

📖2.props

props是从外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,但是你可以通过父组件主动重新渲染的方式传入新的 props。

1.传递单个属性

在组件上采用 key=value的形式写下属性,子组件通过 this.props获取属性。

<Person name="Alice"></Person>const {name} = this.props

2.批量传递属性

使用展开运算符

const p = {name:'Alice',age:23,sex:'女'}...<Person {...p}></Person>

注意:在原生js下,使用展开运算符展开一个对象,这种写法是会报错的。

但在babel和react的影响下,这种写法不会报错,展开运算符也可以展开一个对象了,但仅仅适用于标签语法中。

📑对props进行限制

首先需要引入

import PropTypes from 'prop-types'

写法一:

写在类的内部

static propTypes = { '标签属性':'限制'}

写法二:

写在类的外部

类名.propTypes = {//...}

对标签属性进行类型限制

import PropTypes from 'prop-types'...static propTypes = {name: PropTypes.string, //限制name属性为字符串类型age: PropTypes.number, //限制age为数值 speak: PropTypes.func, //限制speak为函数 isStudent: PropTypes.bool, //限制isStudent为布尔值}

对属性进行必要性限制

PropTypes.string.isRequired📑对props设置默认值

引入

import PropTypes from 'prop-types'

写法一:

写在类的内部

static defaultProps = { 标签属性:默认值}

写法二:

写在类的外部

类名.defaultProps = {//...}

例:

import PropTypes from 'prop-types'...static propTypes = {age:18 //默认age为18}

props 不能在子组件修改!!!

📑state与props的区别

state的主要作用是用于组件保存、控制、修改自己的可变状态。state在组件内部初始化,可以被组件自身修改,而外部不能修改也不能访问。你可以认为 state是一个局部的、只能被组件自身控制的数据源。 state中状态可以通过 this.setState方法进行更新,setState会导致组件的重新渲染。

props的主要作用是让使用该组件的父组件可以传入参数来配置该组件。它是外部传进来的配置参数,组件内部无法控制也无法修改。除非外部组件主动传入新的 props,否则组件的 props永远保持不变。

没有 state的组件叫无状态组件(stateless component),设置了state的叫做有状态组件(stateful component)。因为状态会带来管理的复杂性,我们尽量多地写无状态组件,尽量少地写有状态地组件。这样会降低代码维护地难度,也会在一定程度上增强组件的可复用性。

📖3.ref

给标签设置ref=“username”

​ 通过这个获取this.refs.username,ref可以获取到应用的真实dom。

给组件设置ref=“username”

​ 通过这个获取this.refs.username,ref可以获取组件对象。

新的写法

myRef = React.createRef()...<div ref={this.myref}>hello</div><button onClick={()=>{ //访问 console.log(this.myref.current) }}></button>

React.createRef调用后可以返回一个容器,该容器可以存储被Ref所标识的节点,该容器“专人专用”。

本文链接地址:https://www.jiuchutong.com/zhishi/299510.html 转载请保留说明!

上一篇:【node进阶】深入浅出websocket即时通讯(一)(node深入浅出pdf)

下一篇:【图像分类数据集】非常全面实用的垃圾分类图片数据集共享(图像分类实战)

  • 抖音有电视版吗(抖音有电视机版吗)

    抖音有电视版吗(抖音有电视机版吗)

  • keep能投屏到电视吗(keep能否投屏到电视)

    keep能投屏到电视吗(keep能否投屏到电视)

  • 如何强制解除屏幕使用时间(如何强制解除屏幕使用时间苹果6)

    如何强制解除屏幕使用时间(如何强制解除屏幕使用时间苹果6)

  • airpods无线耳机防水吗(airpods无线耳机多少钱)

    airpods无线耳机防水吗(airpods无线耳机多少钱)

  • 微信运动步数如何让别人看不见(微信运动步数如何关闭)

    微信运动步数如何让别人看不见(微信运动步数如何关闭)

  • 华为nova6手机变黑白怎么调过来(华为nova6手机变成灰色怎么恢复)

    华为nova6手机变黑白怎么调过来(华为nova6手机变成灰色怎么恢复)

  • 淘宝保存的图片为什么相册中找不到(淘宝保存的图片怎么去水印)

    淘宝保存的图片为什么相册中找不到(淘宝保存的图片怎么去水印)

  • 朋友圈只发定位不发内容(微信的朋友圈定位可以随意发送位置?)

    朋友圈只发定位不发内容(微信的朋友圈定位可以随意发送位置?)

  • 32位微信和64位微信的区别

    32位微信和64位微信的区别

  • iphonese和se2的区别(苹果se和se2一样吗)

    iphonese和se2的区别(苹果se和se2一样吗)

  • 抖音收入怎么计算(抖音收入怎么计算增值税)

    抖音收入怎么计算(抖音收入怎么计算增值税)

  • 多媒体技术要解决的问题是(多媒体技术有)

    多媒体技术要解决的问题是(多媒体技术有)

  • 抖音审核多久(抖音审核好久)

    抖音审核多久(抖音审核好久)

  • 怎样把手机号码存到卡上(怎样把手机号码拉入黑名单)

    怎样把手机号码存到卡上(怎样把手机号码拉入黑名单)

  • 华为荣耀20nfc怎么复制门禁卡(华为荣耀20nfc怎么读取公交卡)

    华为荣耀20nfc怎么复制门禁卡(华为荣耀20nfc怎么读取公交卡)

  • 京东上确认收货还能退款吗(京东上确认收货了怎么退货)

    京东上确认收货还能退款吗(京东上确认收货了怎么退货)

  • 华为bkktl00是什么型号(华为bkkal00)

    华为bkktl00是什么型号(华为bkkal00)

  • 微信草稿能找回吗(微信编辑的草稿丢失去了,怎么找回来)

    微信草稿能找回吗(微信编辑的草稿丢失去了,怎么找回来)

  • 芯片指的是什么(芯片指的是什么意思啊)

    芯片指的是什么(芯片指的是什么意思啊)

  • 什么是瀑布屏幕(啥是瀑布屏)

    什么是瀑布屏幕(啥是瀑布屏)

  • 苹果11尺寸(苹果11尺寸长宽多少厘米)

    苹果11尺寸(苹果11尺寸长宽多少厘米)

  • 微信如何添加香港用户(微信怎么添加香港朋友)

    微信如何添加香港用户(微信怎么添加香港朋友)

  • 不连wifi怎么下载150m(不连wifi怎么下载app)

    不连wifi怎么下载150m(不连wifi怎么下载app)

  • 复制的文件在手机那能找到(复制的文件在手机哪里)

    复制的文件在手机那能找到(复制的文件在手机哪里)

  • 学信网登不上去怎么办(学信网登不上去可以重新注册吗)

    学信网登不上去怎么办(学信网登不上去可以重新注册吗)

  • element ui datepicker时间控件实现范围选择周,季,年。(element ui datepicker 源码)

    element ui datepicker时间控件实现范围选择周,季,年。(element ui datepicker 源码)

  • 【微信小程序】条件渲染和列表渲染(微信小程序开发)

    【微信小程序】条件渲染和列表渲染(微信小程序开发)

  • 中国版ChatGPT即将来袭-国内版ChatGPT入口

    中国版ChatGPT即将来袭-国内版ChatGPT入口

  • 房地产预缴增值税计算方式
  • 去年所得税汇算清缴补所得税
  • 应纳所得税额的税率
  • 缴纳企业所得税会计分录怎么做
  • 银行端查询缴税凭证怎么盖章
  • 企业年度财务报表主要包括
  • 煤炭运输企业的环保方案及措施怎么写
  • 收到工伤赔偿款会计分录
  • 出售投资性房地产的会计处理
  • 小规模纳税人季报还是月报?
  • 运费客户承担钱销售员垫付冲应收怎么处理?
  • 付拍卖佣金入什么科目核算及会计分录怎么做?
  • 企业之间现金换承兑合法吗
  • 年底员工借款如何处理
  • 因质量出问题的事件
  • 劳务报酬代扣代缴个人所得税怎么做账
  • 工会经费向地方税务局缴纳的比例是多少
  • 减免增值税可以税前扣除吗
  • 银行授信额度如何分配
  • 差旅费进项可以跨月抵扣吗
  • 拆迁补偿款需要交企业所得税吗
  • 未开票的货款记什么科目
  • 电脑温度过高会怎么样
  • 没有系统U盘,电脑密码忘记了如何打开电脑
  • php哪个函数能取得字符串长度
  • ipssvc.exe - ipssvc是什么进程 有什么作用
  • 跨期发票怎么作废
  • 银行存放同业的钱安全吗
  • vue跳转到外部链接且带上参数
  • 销售商品的会计分录已收到钱
  • 公允模式投资性房地产出售
  • yolov5输出参数
  • 财务处理的时候要做什么
  • vue2 mixin
  • 公司设备搬家费会计分录
  • ai 绘画原理
  • 比肩美国
  • phpstudy命令行
  • 纳税申报需要报哪些税
  • 印花税和工会经费用不用计提
  • 资产处置损益怎么结转到本年利润
  • 转账收手续费不
  • 金税盘证书已冻结怎么解决
  • 医疗报销发票是什么样的
  • 银行年费什么时候取消的
  • 预计可变现净值与账面成本的关系
  • 企业分红所得需要缴纳企业所得税吗
  • 企业为员工承担个人部分的五险 一金可以税前扣除?
  • 没有货怎么做电商
  • 异地预缴税金
  • 企业弥补以前年度亏损要怎么填表
  • 小规模纳税人零税率怎么申报
  • 收到成本发票如何记账
  • 中小企业会计科目
  • 子公司注销债务如何处理
  • 收到增值税专用发票会计科目
  • 购入固定资产预计净残值
  • 会计基本前提包括会计主体货币计量资料完整和经济效益
  • mysql order by 性能
  • sqlserver提示功能怎么打开
  • sql server自动增长方式
  • 怎么查看445端口有没有关闭
  • ubuntu16.04安装拼音输入法
  • centos关闭kdump
  • linux删除lun
  • win10系统如何关闭
  • win10资源管理器频繁无响应
  • istio源码解析
  • linux的open
  • linux oracle数据库登录
  • 在一个批处理系统中
  • 运算符优先级由高到低的顺序
  • Android UI之FrameLayout(帧布局)
  • 利用的英文
  • python中的字符串必须写在一对双引号中
  • jQuery与Ajax以及序列化
  • android studio报错
  • jquery获取php变量
  • 个人所得税代扣代缴手续费退库申请
  • 税务登记证办理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设