第七章 React组件API

2023-11-07


在React中,常见的React组件API包含如下:
1、设置状态:setState
2、替换状态:replaceState
3、强制更新:forceUpdate
要调用组件上的API,首先需要获取对组件的引用。在组件方法内部可以通过this访问,在组件外唯一访问组件方法就是通过React.render的返回值,在其它组件内访问组件,可以使用refs获得对组件的引用。
需要注意的是,在新版本的react中,props 一旦创建,永远不可修改,因此 .setProps 及 .replaceProps 已废弃。
一、设置状态API:setState(object nextState[, function callback])
参数含义:
1、nextState:将要设置的新状态,该状态会和当前的state合并
2、callback,回调函数,可选参数。该函数会在setState设置成功,且组件重新渲染后调用。
功能:
合并nextState和当前state,下一次事件循环时this.state 的对应键就会被更新为该设定的值,并重新渲染组件。setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法,一旦state发生改变并触动了绑定的逻辑,那么UI内容自然也会跟着变动。
需要注意的是,可以在 shouldComponentUpdate 方法中获取到 nextState 的值。另外,setState()并不会立即改变this.state,而是创建一个即将处理的state。setState()并不一定是同步的,为了提升性能React会批量执行state和DOM渲染。
实例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React组件API</title>
<script src="js/react.min.js"></script>
<script src="js/react-dom.min.js"></script>
<script src="js/browser.min.js"></script>
</head>
<body>
<div id="hello"></div>
<script type="text/babel">
var ClickCounter = React.createClass({
getInitialState: function() {
return {
clickCount: 0
};
},
handleClickFun: function() {
this.setState(function(state) {
return {
clickCount: this.state.clickCount + 1
};
});
},
shouldComponentUpdate:function(nextProps, nextState){
console.log("状态值即将改变为:"+nextState.clickCount);
return true
},
componentDidUpdate: function(){
           console.log('componentDidUpdate')
           },
render: function() {
return(<div onClick = {this.handleClickFun}>当前点击次数为: 
{
this.state.clickCount
} </div>);
}
}); 
ReactDOM.render(<ClickCounter / > ,
document.getElementById("hello")
);
</script>
</body>
</html>
二、替换状态API:replaceState (object nextState[, function callback])
参数含义:
1、nextState:将要替换的新状态,该状态会替换当前的state。
2、callback,回调函数,可选参数。该函数会在replaceState设置成功,且组件重新渲染后调用。
功能:
replaceState 就是一个彻底更换掉 state 的方法,使用的时候需要小心,避免删掉一些重要的state属性。


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React组件API</title>
<script src="js/react.min.js"></script>
<script src="js/react-dom.min.js"></script>
<script src="js/browser.min.js"></script>
</head>
<body>
<div id="hello"></div>
<script type="text/babel">
var ClickCounter = React.createClass({
getInitialState: function() {
return {
abc:12,//这里初始化了一个 state.abc
clickCount: 0
};
},
handleClickFun: function() {
this.replaceState({
clickCount:1
},function(){
//执行后,发现this.state中已经没有abc
console.log(this.state)
}
);
},
shouldComponentUpdate:function(nextProps, nextState){
console.log("abc状态值即将改变为:"+nextState.abc+"  "+nextState.clickCount);
return true
},
componentDidUpdate: function(){
           console.log('componentDidUpdate')
           },
render: function() {
return(<div onClick = {this.handleClickFun}>当前值变为: 
{
this.state.clickCount
} </div>);
}
}); 
ReactDOM.render(<ClickCounter / > ,
document.getElementById("hello")
);
</script>
</body>
</html>
控制台执行结果为:
 
需要注意的是,我们发现原来在 getInitialState 里还额外定义了一个 abc 的 state 属性,但在 replaceState 后再试着打印 this.state,会发现这个 state.abc 已经被删除了,见上图。如果换成 setState 则不会被删除,这也是它们之间的一个重要区别。
三、强制渲染API:forceUpdate([callback(function)])
参数含义:
1、callback,回调函数,可选参数。注意该方法的回调,也是在重新渲染之后才执行的。
功能:forceUpdate()方法会使组件调用自身的render()方法重新渲染组件,只要调用,都会强制渲染组件。具体体现在下面两个方面:
1、 shouldComponentUpdate 返回了false。
2、不以 props 或 state 来作为触发渲染的条件。使用了一个变量来作为UI内容,在该变量的值改变了且我们希望触发渲染时,可以使用该方法,当然这是不推荐的。
一般来说,应该尽量避免使用forceUpdate(),而仅从this.props和this.state中读取状态并由React触发render()调用。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>React组件API</title>
<script src="js/react.min.js"></script>
<script src="js/react-dom.min.js"></script>
<script src="js/browser.min.js"></script>
</head>
<body>
<div id="hello"></div>
<script type="text/babel">
var ClickCounter = React.createClass({
getInitialState: function() {
return {
clickCount: 0
};
},
handleClickFun: function() {
this.setState(function(state) {
return {
clickCount: this.state.clickCount + 1
};
});
this.forceUpdate(function(state) {
console.log("强制渲染!")
});

},
shouldComponentUpdate:function(nextProps, nextState){

return false
},
componentDidUpdate: function(){
           console.log('componentDidUpdate')
           },
render: function() {
return(<div onClick = {this.handleClickFun}>强制渲染 
{

} </div>);
}
}); 
ReactDOM.render(<ClickCounter / > ,
document.getElementById("hello")
);
</script>
</body>


</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第七章 React组件API 的相关文章

  • 如何在SDK中打开例程

    第一步 在某个硬盘如D盘中新建一个文件夹 名字随意取 如为 10 2 xinlicheng 第二步 打开CCS 设置工作路径为10 2 xinlicheng的工作路径 并点launch 如下图 第三步 在菜单栏中的project 下拉找到i
  • 微服务实战中如何理解服务熔断和降级的区别

    你好 我是老王 不做隔壁的邻居 只想交个朋友 欢迎关注我的公众号 王自简 以下内容若引起您的不适 欢迎指正 您的批评是我成长的动力 熔断 举个例子解释 生活中每家每户都在用电 小明家的电线因为故障导致了小明家停电了 而小李 小张家的电是正常

随机推荐

  • QTableWidget部件使用

    一 部件说明 qtablewidget部件常用来作为qt界面表格显示工具 qtablewidget是qtableview的子类 其区别是qtableview可以使用自定义的数据模型来显示内容 而qtablewidget只能使用标准的数据模型
  • 2020-12-27

    海盗分金币 题目 代码 题目 有5个海盗 相约进行一次帆船比赛 比赛中天气发生突变 他们被冲散了 恰巧 他们都先后经过途中的一个无名的荒岛 并且每个人都信心满满 觉得自己是第一个经过该岛的人 第一个人在沙滩上发现了一堆金币 他把金币分成5等
  • SAP ABAP ME23N 采购订单打印输出

    本人诚心接ABAP远程开发任务 价格公道 有需要的联系我 欢迎个人 甲方爸爸 乙方私信联系 完成的功能是ME23N 点击打印预览 客制化用户自己的打印模板 首先需要先配置打印输出 路径 spro gt 物料管理 gt 采购 gt 消息 gt
  • 【SQL Server DBA】日常巡检2:windows性能监控器

    性能监视器的各类指标 一 内存指标 1 Windows层面上的内存使用检查在检查SQL Server内存使用之前 DBA必须首先检查一下Windows层面的内存使用情况 Windows层面没有明显的内存压力 是SQL Server正常运行的
  • Github Blame、History 按钮什么意思?

    Github Blame History 按钮 是啥意思 blame 按行显示最新提交的信息 The blame command is a Git feature designed to help you determine who mad
  • percent percentile percentage有什么区别

    percent 百分之几 My mobile phone battery is currently at 10 percent 我的手机电池目前还有10 percentage 百分比 The percentage of students w
  • JetBrains IDE使用(更新中)

    简介 JetBrains IDE是JetBrains公司推出的IDE Integreated Development Environment 集成开发环境 包括IntelliJ IDEA PyCharm WebStorm等 该公司旗下的ID
  • 说说webpack中常见的Plugin?解决了什么问题?

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 webpack中的 Plugin 是什么 二 配置方式 1 通过配置文件导出对象中plugins属性传入new实例对象 如下所示 三 常见的Plugin 总结
  • uniapp ios圆角溢出不影藏的问题

    代码 list img position relative z index 1 overflow hidden height 154px text align center border radius 5px border 1px soli
  • Firefox报错——Gah. Your tab just crashed.

    Firefox报错 Gah Your tab just crashed 使用kali内置的firefox的时候报错了 看了一下好像没有可执行文件了 可能不小心删了吧 早看内置的不爽了 正好下个新的 在Kali官网下载linux的安装包 链接
  • 运算符

    文章目录 一 算术运算符 1 基本四则运算符有 加 减 乘 除 求余或求模 2 增量赋值运算符有 3 自增 自减运算符 二 关系运算符 关系运算符主要有 lt gt lt gt 三 逻辑运算符 逻辑运算符主要有 逻辑与 逻辑或 逻辑非 四
  • 安装配置mariadb

    记录下安装配置mariadb的经历 环境 ubuntu22 一 apt在线安装 apt代理配置 APT是Ubuntu系统中用于安装和升级软件包的工具 如果本地没有可用的软件包 APT将会连接到远程软件包服务器下载软件包 在某些情况下 用户需
  • 信息熵(Entropy)到底是用来衡量什么的?

    信息熵 Entropy 到底是用来衡量什么的 与Philip ZHANG商榷 思明 中国研究 zgyj1999 xiamian htm
  • 学习MQTT QoS的原理与应用

    MQTT QoS的原理与应用 学习QoS的原理与应用 文章目录 MQTT QoS的原理与应用 一 什么是服务质量 2 设置QoS 3 服务质量降级 4 使用步骤 1 引入PubSubClient库 二 保留消息 保留消息得到介绍 保留消息应
  • SQLI-LABS环境搭建及并进行拖库教程——解决MySQL注释问题--+

    1 SQLI LABS专有靶场搭建 1 1 SQLI LABS下载 SQLI LABS 是一个学习 SQL 注入的实验平台 下载地址 https github com Audi 1 sqli labs 1 2 Lamp环境搭建 在cento
  • seq2seq attentio

    encoder和decoder中的注意力机制 注意力机制的核心思想 在decoder的每一步 把encoder中的 所有向量提供给decoder模型 让decode根据自己当前的情况来选择自己需要的信息 例子 h1 2 3 是encoder
  • android 获取程序目录结构,Android开发程序的目录结构详解

    第一部分 c c 代码 Android系统源代码目录里面 hardware ril 目录包含了所有有关于telephony的底层代码 1 目录架构 20101215的git版本 ril CleanSpec mk include teleph
  • 关于fgets()函数的使用方法

    在读取字符串时 scanf 和转换说明符 s只能读取一个单词 gets 函数简单易用 它读取整行输入 直至遇到换行符 然后丢弃换行符 存储其余字符 并在这些字符的末尾添加一个空字符使其成为一个C字符串 但是出现一个问题 gets 函数无法检
  • VUE element-ui之form表单中input输入超过规定长度error提醒,并实时显示输入长度,可无限输入

    需求 输入超过规定长度error提醒 并实时显示输入长度 可无限输入 步骤 我的项目中使用校验比较多 所以进行简单的封装 新建js文件写入下面的函数 export function valieTextLength rule value ca
  • 第七章 React组件API

    在React中 常见的React组件API包含如下 1 设置状态 setState 2 替换状态 replaceState 3 强制更新 forceUpdate 要调用组件上的API 首先需要获取对组件的引用 在组件方法内部可以通过this