网站首页 > 技术文章 正文
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 TestComponmentprops属性
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编辑器实战)
- 11-23微信如何群发消息给所有人(微信如何群发消息给所有人全选)
- 11-23腾达路由器手机登录(腾达路由器官网页登录)
- 11-23防火墙关闭对电脑有影响吗(防火墙关闭有什么影响)
- 11-23联想笔记本电脑官网查询真伪入口
- 11-23申请恢复qq群(申请恢复qq群聊怎么恢复)
- 11-23苹果查询激活日期和保修期限
- 11-23u盘提示格式化但无法格式化(u盘提示格式化却无法格式化)
- 11-22pe启动盘怎么装系统(pe启动盘如何重装系统win10)
- 最近发表
- 标签列表
-
- 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 (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
