没有什么是不可能的,只是需要找到正确的方法。

1. 什么是状态?

状态就是组件内部特有数据的载体(组件数据挂载方式),改变数据页面就会刷新,由组件自己设置和更改,也就是说由组件自己产生、维护,使用状态的目的就是为了在不同的状态下使组件的显示不同(自己管理),这在 React 中称为:条件渲染

为什么用状态?

React 不能直接修改 DOM 来更新页面。React 采用声明式设计,需要通过状态的改变来更新页面。

2. 使用状态 :state 关键字

import React, { Component } from 'react'

export default class App extends Component {
// 组件状态两种写法
// state = {
// isLove: false
// } constructor() {
super()
this.state = {
isLove: false
}
} isLoveFunc = ()=> {
this.setState({
isLove: !this.state.isLove
})
} render() {
return (
<div>
<h1>喜欢就收藏吧!</h1>
<button onClick={ ()=>{ this.isLoveFunc() } }>{this.state.isLove?"取消收藏":"收藏"}</button>
</div>
)
}
}

3. 使用状态 :setState 关键字

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

4. setState 同步异步

setState 处在同步逻辑中,异步更新状态,更新真实 Dom。

setState 处在异步逻辑中,V18:异步更新状态,更新真实 Dom,V17:同步更新状态,更新真实 Dom。但是要在 V18 中使用 createRoot 这个新的 renderapi。如果在 V18 中使用的还是 ReactDOM.render()这种老的 api 那结果是和 V17一致的。

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

5. 列表 key 值

React 的高效依赖于所谓的 Virtual-DOM,尽量不碰 DOM。对于列表元素来说会有一个问题:元素可能会在一个列表中改变位置。要实现这个操作,只需要交换一下 DOM 位置就行了,但是 React 并不知道其实我们只是改变了元素的位置,所以它会重新渲染后面两个元素 (再执行 virtua-DOM),这样会大大增加 DOM 操作。但如果给每个元素加上唯一的标识,React 就可以知道这两个元素只是交换了位置,这个标识就是 key,这个 key 必须是每个元素唯一的标识。为了列表的复用和重排,设置 key 值提高性能。理想 key 值为 item.id。然而在不涉及到列表的增加删除、重排设置成索引值也没有问题。

React 组件之状态的更多相关文章

  1. React组件系统、props与状态(state)

     多个组件合成一个组件: var style = { fontSize: 20, color: '#ff0000' }; var WebSite = React.createClass({ rende ...

  2. [转] 深入理解React 组件状态(State)

    React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据. 一. 如何定义State 定义一个合适 ...

  3. 深入理解React 组件状态(State)

    React 的核心思想是组件化的思想,应用由组件搭建而成,而组件中最重要的概念是State(状态),State是一个组件的UI数据模型,是组件渲染时的数据依据. 一. 如何定义State 定义一个合适 ...

  4. 在React中跨组件分发状态的三种方法

    在React中跨组件分发状态的三种方法 当我问自己第一百次时,我正在研究一个典型的CRUD屏幕:"我应该将状态保留在这个组件中还是将其移动到父组件?". 如果需要对子组件的状态进行 ...

  5. React 组件性能优化探索实践

    转自:http://www.tuicool.com/articles/Ar6Zruq React本身就非常关注性能,其提供的虚拟DOM搭配上Diff算法,实现对DOM操作最小粒度的改变也是非常的高效. ...

  6. React 组件性能优化

    React组件性能优化 前言 众所周知,浏览器的重绘和重排版(reflows & repaints)(DOM操作都会引起)才是导致网页性能问题的关键.而React虚拟DOM的目的就是为了减少浏 ...

  7. 在React 组件中使用Echarts

    在完成一个需求的时候碰到一个场景需要使用柱状图.涉及到可视化,第一反应当然是Echarts了.平时用js加载Echarts组件很方便,但是在React中就要费下神了.各种连蒙带猜实现了.edmo里的E ...

  8. 野心勃勃的React组件生命周期

    当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件    React实现了UI=Fn(St ...

  9. React组件生命周期过程说明

    来自kiinlam github94 实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidM ...

  10. React组件开发

    目录: 属性:props 内联样式 状态记忆 : state 生命周期 访问DOM 表单输入 承接快速入门篇:http://www.cnblogs.com/jasonnode/p/4444504.ht ...

随机推荐

  1. 人工智能GPT科普知识的简单总结

    人工智能GPT相关知识的简单总结 背景 工作已经很久, 工作十几年来有过好多波新的技术浪潮. 但是每次都离技术前沿比较远. 最近发现只低头拉车是一个没有前途的行为. 人生很短, 选择很重要, 不仅要低 ...

  2. [转帖]Nacos的版本支持情况

    https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 由于 Spring ...

  3. OpenEuler切换内核的方法-bcc学习后续

    OpenEuler切换内核的方法 摘要 昨天使用OpenEuler 22.03 LTS学习bcc但是一直不行. 没办法切换到CentOS8 还有 Anolis 8 很容易就可以直接还是用了 yum i ...

  4. Rendezvous hashing算法介绍

    Rendezvous hashing Rendezvous hashing用于解决分布式系统中的分布式哈希问题,该问题包括三部分: Keys:数据或负载的唯一标识 Values:消耗资源的数据或负载 ...

  5. linux中如何统计千万个文件总和

    很简单.很简单.很简单.重要事情说三遍 命令:ls | grep '匹配信息' | wc -l ls查看该目录下的所有文件,果然隐藏文件也要匹配上的话,需要:ls -a grep匹配,如查看文件中有. ...

  6. 说透IO多路复用模型

    作者:京东零售 石朝阳 在说IO多路复用模型之前,我们先来大致了解下Linux文件系统.在Linux系统中,不论是你的鼠标,键盘,还是打印机,甚至于连接到本机的socket client端,都是以文件 ...

  7. 感性理解 int 与 long long 的速度差距 & 感性理解不同取模方法的差距

    long long 题该怎么做?#define int long long 会多慢? 有时候,当我们被卡常的时候,不妨想一想,自己在开头定义的 #define int long long 有多大影响? ...

  8. 【记录一个问题】vm-select和vm-storage均无法做并行查询

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 看我提的这个issue: need parallel qu ...

  9. Go实现网络代理

    使用 Go 语言开发网络代理服务可以通过以下步骤完成.这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例. 步骤 1. 安装 golan ...

  10. 【3】超级详细matplotlib使用教程,手把手教你画图!(多个图、刻度、标签、图例等)

    相关文章: 全网最详细超长python学习笔记.14章节知识点很全面十分详细,快速入门,只用看这一篇你就学会了! [1]windows系统如何安装后缀是whl的python库 [2]超级详细Pytho ...