网站首页 > 技术文章 正文
state属性
react 把组件看成是一个状态机。通过界面与用户行为之间的交互,实现不同状态调整,然后重新渲染 UI,让用户界面和数据保持一致。
react 里,只需更新组件的 state,然后根据新的信息 state 重新渲染用户界面(不要直接操作 DOM元素)。修改State使用this.setState方法,直接使用this.state.num虽然会修改属性,但是无法更新组件。setState并不一定是同步更新的,例如react封装的onClick、onChange等事件是异步提交更新的,而js原生事件是同步更新的。开发中大部分用到的是react封装事件。
要解决state同步更新问题,需要让setState接收一个函数而不是一个对象。this.setState((state,props)=>{num:state.num+1})
import React from "react";
class TestComponment extends React.Component {
constructor(props) {
super(props);
this.state={
num:0
}
}
render() {
const add =() => {
this.setState({
num: this.state.num +1
})
}
const sub = () => {
this.setState({
num: this.state.num - 1
})
}
return(
<div>
<h1>{this.state.num}</h1>
<button onClick={add}>加一</button>
<button onClick={sub}>减一</button>
</div>
)
}
}
export default TestComponment
props属性
props是不可变的,在react单项数据流是通过props实现的。每个组件都含有自己的props属性,父组件向子组件传递消息通过props传输。props中的属性可以指定数据类型。获取props属性通过this.props.xxxx。
const Componment = (props) => {
console.log(props)
return(
<div>
hello {props.user.name}
</div>
)
}
refs属性
refs提供给我们访问DOM节点,或者是react组件的实例的一种方式。一般情况是用不到refs这个属性,因为react不建议我们直接操作底层DOM元素,而是在render函数里去编写我们的页面结构,由React来组织DOM元素的更新。但凡事总有例外,总会有时候需要我们直接去操作页面的真实DOM,这就要求我们有直接访问真实DOM的能力,而refs就是为我们提供了这样的能力。
<input ref="myInput" />
let input = this.refs.myInput;
let inputValue = input.value;
let inputRect = input.getBoundingClientRect();
总结
state属性是可变的,通过改变state状态更新组件;props是不可变的,父子组件中通过props属性从上向下传递数据,保证数据单一流向;refs提供直接操作DOM元素的方法,一般情况下不建议使用,尽可能的使用声明式编程。
猜你喜欢
- 2024-10-04 Vue选项:computed计算属性(vue3.0 计算属性)
- 2024-10-04 Vue 中的计算属性(vue中的计算属性)
- 2024-10-04 Js基础7:表单元素属性(js中表单)
- 2024-10-04 Jquery属性——学习笔记(一)(如何使用jquery设置一个属性值)
- 2024-10-04 前端入门——在网页中使用JavaScript
- 2024-10-04 前端-JavaScript中的class(javascript class)
- 2024-10-04 如何获取JavaScript中某个函数可接受的参数数量
- 2024-10-04 关于js设置对象attr属性的问题(js对象属性值)
- 2024-10-04 JS 对象基本用法(js对象的操作方法)
- 2024-10-04 使用JavaScript实现前端导入和导出excel文件?(H5编辑器实战)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)