React/React Native之状态机原理

2023-10-30

在讲React/React Native状态机原理之前,先让大家看一个春哥用React编写的小案例的网页效果图,当文本框中的内容发生变化时,会将文本框中的内容同步输出,按照我们之前Android和iOS的思维,当文本框中内容发生变化时,它会触发一个回调函数,然后在回调函数中取出文本框中的text值然后赋给下面的一个label。

http://yiqizhongchuang.cn/3reactreact-native

qq20160914-02x qq20160914-22x

状态机思维

React 框架将所有的UI视为一个简单的状态机,那么任意一个UI场景就是一个状态机中一种状态。根据决定状态的状态机变量的值,React框架渲染出状态机的当前状态----对于开发者来说,单个UI场景就被渲染出来了。随着状态机变量值的改变,UI状态机也在不停的改变状态,UI场景也随之不停的被重新渲染。这样一个过程可以轻松的做到数据与UI保持一致。接下来根据源码分析一下上面效果图实现的原理:

<script type="text/babel">
    class ShowEditor extends React.Component {
        // 构造
          constructor(props) {
            super(props);
            // 初始状态
            this.state = {value: '你可以在这里输入文字'};
          }

        handleChange() {
            this.setState({value: ReactDOM.findDOMNode(this.refs.textarea).value});
        }
        render() {
            return (
                    <div>
                        <h3>输入</h3>
                        <textarea style={{width:300, height:150, outline:'none'}}
                                  onChange={(text) => this.handleChange(text)}
                                  ref="textarea"
                                  defaultValue={this.state.value} />
                        <h3>输出</h3>
                        <div>
                            {this.state.value}
                        </div>
                    </div>
            );
        }
    }

    ReactDOM.render(<ShowEditor />, document.getElementById('example'));
</script>

状态机变量value的默认值为:'你可以在这里输入文字',当我们修改textarea里面的值时,就会触发handleChange函数(PS:给onChange赋值时最好用箭头函数,不要写成onChange={this.handleChange}),在handleChange函数里面改通过this.state将textarea里面的值赋给状态机变量value。重要:当状态机变量的值发生变化时,就会重新调用render函数进行UI渲染。状态机变量的值只要发生变化就会调用render函数重新渲染一次。

React Native案例

只要你弄明白React的状态机原理以后,React Native的原理和React是一样的,接下来我让大家看看React Native的效果图和源码。

效果图:

qq20160915-02x

源码:

class rn_state_demo extends Component {

    // 构造
    constructor(props) {
        super(props);
        // 初始状态
        this.state = {textInputValue: '你可以在这里输入文字'};
    }

    updateTextInputValue(newText){
        this.setState({textInputValue: newText});
    }

    render() {
        return (
            <View style={styles.container}>

                <TextInput
                    style={styles.textInputStyle}
                    placeholder={'你可以在这里输入文字'}
                    onChangeText={(newText) => this.updateTextInputValue(newText)}
                />
                <Text style={styles.textShow}>
                    {this.state.textInputValue}
                </Text>
            </View>
        );
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React/React Native之状态机原理 的相关文章

  • C#:复制文件显示进度条

    1 窗口界面 主要是文本框textBox 按钮button 进度条prograssBar三大组件所组成的 2 完整代码 using System using System IO using System Windows Forms usin
  • [JAVAee]Linux上的javax.mail报错

    我们把在window写的项目部署到Linux上的Tomcat时 如果发现使用不了了 该如何找到错误呢 找到报错的地方在哪呢 在Linux环境下来到Tomcat目录下的logs目录 输入 tail f catalina out n 500 t
  • JDK安装步骤

    安装过程 新建文件夹 新建文件夹 首先新建两个路径 D java jdk和D java jre 代表我把Java安装到D盘下的java路径下 在该路径下要新建两个路径 一会儿放jdk和jre 安装过程 安装过程 1 默认是这个路径 更改一下
  • Linux与Windows操作系统之间的技术差异与迁移

    引言 操作系统是计算机领域中的核心组成部分 为我们提供了统一且可靠的计算环境 Linux和Windows作为最广泛使用的操作系统之一 在技术层面存在着显著的差异 当我们从一个操作系统迁移到另一个操作系统时 可能会面临一些技术挑战 本文将着重
  • openGauss学习笔记-68 openGauss 数据库管理-创建和管理普通表-向表中插入数据

    文章目录 openGauss学习笔记 68 openGauss 数据库管理 创建和管理普通表 向表中插入数据 68 1 背景信息 68 2 操作步骤 68 2 1 向表customer t1中插入一行 68 2 2 向表中插入多行 68 2
  • QT从入门到实战x篇_02_创建第一个Qt工程:创建工程、代码含义、模块、命名规范、快捷键、帮助文档快捷方式

    1 创建一个Qt工程 请参考之前的文章 如何在qcreate中创建一个程序 2 程序中代码的具体含义 整体结构如下 1 pro文件 就是一个工程文件 其中一般不要加注释 低版本的 pro解释 pro就是工程文件 project 它是qmak
  • 9.5-9.9 小知识点

    目录 1 什么是静态文件 django静态文件配置如何配置 如何解决接口前缀不断变化 html页面上路径的引用需要反复修改的问题 2 request对象的方法有哪些 分别是干什么用的 请具体阐述细节及注意事项 3 django自带的数据库是
  • 算法——判断有向图是否有回路

    思路 一 借助AOV的拓扑排序算法来对整个有向图进行排序 拓扑排序算法 1 统计所有节点的入度 2 把所有入度为0的节点入栈 3 在栈不为空的条件下把栈顶元素一个一个的弹出 并把与此节点相连的节点 即此节点指向的节点 的入度减一 再判断入度
  • Chromium命令行开关列表2

    Chromium命令行开关列表 Google Chrome浏览器可以使用很多命令行 一些更改功能的行为 其他用于调试或试验 该页面列出了可用的开关 包括其条件和说明 上一次自动更新发生在2020 08 12 Condition Explan
  • C51实现流水灯

    文章目录 一 实验要求 二 实验代码和原理图 1 代码 2 原理图 总结 一 实验要求 1 先八盏灯从左至右依次点亮 同一时刻仅有一盏灯处于被点亮状态 每盏灯亮0 5s 然后八盏灯从右至左依次点亮 同一时刻仅有一盏灯处于被点亮状态 每盏灯亮
  • hdu 1074 Doing Homework

    Problem acm hdu edu cn showproblem php pid 1074 题意 n 份作业 分别给出名字 完成所需时间 cost 最迟上交时间 deadline 作业每迟交一天扣一分 问最少的扣分数 Analysis
  • 关于.sln和.suo文件

    sln 和 suo都是是解决方案文件 sln Visual Studio Solution 它通过为环境提供对项目 项目项和解决方案项在磁盘上位置的引用 可将它们组织到解决方案中 包含了较为通用的信息 包括解决方案所包含项目的列表 解决方案
  • TCL foreach的用法

    总结放于前 foreach var list body是foreach的的常见用法 foreach为关键字 var为形参 list为数据容器 数组等 body为函数块 程序每次在程序执行时从list中取到值并赋给形参var 函数块利用var
  • sql外连接内连接

    内连接 两表的交集 符合要求的数据列出来 外连接 左外连接就是查询 join左边表中的所有数据 并且把join右边表中对应的数据查询出来 主表的数据去跟从表一一比较 有就全部列出来 没有就也要列出一条 主表数据全要 他的从表数据变成Null
  • springboot集成Redis

    springboot集成Redis 1 windows平台安装Redis 2 引入依赖 3 修改配置文件 4 启动类添加注解 5 指定缓存哪个方法 6 配置Redis的超时时间 小BUG 测试 对于项目中一些访问量较大的接口 配置上Redi
  • python连接mysql数据库报错pymysql.err.OperationalError

    一 报错信息 pymysql err OperationalError 1045 Access denied for user root localhost using password YES Traceback most recent
  • docker基础:docker stats监控容器资源消耗

    docker stats docker stats 命令用来显示容器使用的系统资源 默认情况下 stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl c 下面是输出的主要内容 CONTAINER 以短格式显示容器的 ID
  • 基于反事实因果推断的度小满额度模型

    本文约4400字 建议阅读9分钟 本文从三个角度与你分享基于反事实因果推断的度小满额度模型 1 因果推断的研究范式 1 相关性与因果性 2 三大基本假设 2 因果推断的框架演进 1 从随机数据到观测数据 2 反事实表示学习 3 反事实额度模
  • 四川百幕晟科技有限公司:抖音没有视频怎么开店铺?

    抖音是中国最受欢迎的短视频平台之一 吸引了数亿用户 很多电商卖家希望利用抖音平台开展业务 但他们可能没有视频资源 幸运的是 抖音还提供了非视频商店功能 允许卖家开设自己的商店并在抖音上推广产品 本文将详细介绍在抖音上开店的步骤 并探讨如何在

随机推荐

  • 破解windows明文密码

    之前看了法国人写的一个软件 mimikatz 可以直接获取windows下的明文密码 简直是丧心病狂 作者已经开源 大家可以去谷歌一下 用SVN下载了源码 是vs2010的工程 然后按照下面命令开始看代码 privilege debug i
  • SQLAlchemy映射已有数据表

    方法一 手动创建数据表模型类进行映射 映射的表必须要有主键 配置数据库连接参数 class Config SQLALCHEMY DATABASE URI mysql pymysql root 123456 localhost 3306 te
  • mysql5.7 免安装版的配置过程

    1 去官网下载mysql 5 7 2 解压压缩包 首先给压缩包重命名一下 修改为你自己想要的 将解压目录下默认文件 my default ini 拷贝一份 改名 my ini 3 修改一下my ini 文件里的内容 client port
  • 基于卷积神经网络结合注意力机制长短记忆网络CNN-LSTM-Attention实现风电功率多输入单输出回归预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • Kafka安装及测试

    系统环境 Linux Ubuntu 16 04 jdk 7u75 linux x64 相关知识 Kafka是由LinkedIn开发的一个分布式的消息系统 使用Scala编写 它因可以水平扩展和高吞吐率而被广泛使用 目前越来越多的开源分布式处
  • WPF编程,通过Path类型制作沿路径运动的动画另一种方法。

    上一篇文章给了一个这方面的例子 那个文章里是通过后台按钮事件进行动画的开始 停止 继续等 这里给出的是通过前台XAML来实现 1 前台 定义路径 定义运动的主体 这里是一圆
  • IEEE 754 round-to-nearest-even

    IEEE 754 二进制的向偶舍入 舍入的值保证最靠近原浮点数值 如果舍入为中间值 即舍还是入距离相等 那么按其最末尾一位是奇数 则入 如果为偶数 则舍 下面例子说明 xxx yyyyy10000 x为实数任意值 y为任意值 最末尾y为需要
  • 用C++实现简单的小游戏

    采用面向对象的编程思想 在头文件中引入acllic图形库 实现c 控制图片以及生成可视化窗口 所需工具 acllib图形库下载地址 acl图形库下载地址 win32位项目的创建 通过visual studio创建win32项目 三张图片 t
  • python 数据分析--数据处理工具Pandas(2)

    数据处理模块 Pandas 4 Pandas处理字符串和日期数据 5 Pandas 数据清洗 5 1 重复观测处理 5 2 缺失值处理 5 2 1 删除法 5 2 2 替换法 5 3 异常值处理 6 获取数据子集 7 透视表 合并与连接 分
  • Transformer中的position encoding(位置编码一)

    本文主要讲解Transformer 中的 position encoding 在当今CV的目标检测最前沿 都离不开position encoding 在DETR VIT MAE框架中应用广泛 下面谈谈我的理解 一般position enco
  • Activity 的启动分析 ( 9.0 )

    Activity 的启动系统已经做了很多的封装 使得我们在开发的时候不用去关注底层的东西 需要一句代码就可以搞定拉起一个Activity Intent intent new Intent this TestActivity class st
  • Excel如何制作动态模糊匹配的下拉菜单?

    之前给大家分享了如何使用函数制作模糊匹配的下拉菜单 但函数那家伙的特点是小巧灵 数据量稍大 效率就比较差了 众所周知 在Excel里 高效率解决复杂问题 还是得靠又傻又愣的VBA 今天就再给大家分享一下 如何使用VBA制作更好用的动态模糊匹
  • python的label显示图片,如何在标签中显示图片和文本(PyQt)

    我需要在标签中显示图片和文本 这是我的代码 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets import class MyLa
  • 机械臂编程_建立自己的机械臂-编程

    机械臂编程 现在 手臂已经组装好了 是时候将其提升到一个新的水平 现在是释放野兽并完全控制整个机器人手臂的时候了 在这篇文章的结尾 您应该对如何对该机械臂进行编程以完成您想要的事情有一个想法 要了解我如何到达这里 请访问我以前的文章 该文章
  • Kubernetes 工作负载控制器Deployment和Replicaset

    Deployment 介绍 管理Pod和ReplicaSet 具有上线部署 副本设定 滚动升级 回滚等功能 提供声明式更新 例如只更新一个新的Image 应用场景 网站 API 微服务 Deployment 使用流程 项目生命周期 Depl
  • SpringCache入门

    1 简单介绍 Spring Cache 是 Spring 提供的一整套的缓存解决方案 虽然它本身并没有提供缓存的实现 但是它提供了一整套的接口和代码规范 配置 注解等 这样它就可以整合各种缓存方案了 比如 Redis Ehcache 我们也
  • java 对象获取堆_【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?...

    写在前面 从开始学习Java的时候 我们就接触了这样一种观点 Java中的对象是在堆上创建的 对象的引用是放在栈里的 那这个观点就真的是正确的吗 如果是正确的 那么 面试官为啥会问 Java中的对象就一定是在堆上分配的吗 这个问题呢 看来
  • 单元测试方法总结

    1 引言 应用系统的实施代码构建完成之后 并不代表项目已经结束 至少还有系统测试 部署以及性能调优等工作需要完成 测试的目的是检验开发结果是否满足规定需求 测试时保证软件质量的重要手段 是软件开发不可缺少的组成部分 虽然测试是一件乏味的工作
  • Mysql查询字符串中某个字符串出现的次数

    目录 1 查单个字符出现的次数 2 查多个字符出现的次数 3 函数讲解 1 查单个字符出现的次数 比如我想查how do you do 字符串当中出现d的次数 第一眼看上去有点懵 首先mysql并没有直接计算出现字符次数的函数 所以才使用了
  • React/React Native之状态机原理

    在讲React React Native状态机原理之前 先让大家看一个春哥用React编写的小案例的网页效果图 当文本框中的内容发生变化时 会将文本框中的内容同步输出 按照我们之前Android和iOS的思维 当文本框中内容发生变化时 它会