React Native状态机和应用设计思路
React Native状态机和应用设计思路
在原生Android开发中:当用户点击“登录”按钮时,从用户名输入框中读取用户输入的用户名,从密码输入框中读取用户输入的密码,然后交给注册模块去处理。但是,React Native不是这样的思维。
一、状态机
1.1 状态机思维
React框架将所有的UI视为一个简单的状态机,那么任意一个UI场景就是状态机的一种状态。根据决定状态的状态机变量的值,React框架渲染状态机的当前状态——对于开发者来说,单个UI场景就被渲染出来了。随着状态机变量值的改变,UI状态机也在不停地改变状态,UI场景也随之不停地被重新渲染。这样一个过程可以很轻松地做到数据与UI保持一致。
每一个通过React.createClass(这是ES5的语法,也可以用ES6的语法)建立的组件都可以有一个名为setInitialState的函数。当组件被初始化时,该函数被执行。通常在这个函数中声明需要用到的状态机变量。

在上图中,声明了三个状态机变量。
1.2 状态机变量
在React Native代码中,我们可以通过“this.state.状态机变量名”来访问状态机变量。访问意味着可以读取变量的值,也可以改变变量的值。
在React Native开发中,开发者需要将状态机变量视为“不可变的变量”。在开发者的代码中,永远不要出现“this.state.某状态机变量名 = 某值;”这样的语句。当开发者需要改变状态机变量的值时,一定要并且只能用this.setState函数。
状态机变量的改变会导致React Native组件的重新渲染。提高React Native应用程序的性能的一种方法就是努力减少状态机变量的数目。
React Native应用程序工作时,React Native组件接收各种事件,对所接收到的事件的处理可能导致处理结果中的某些数据需要显示在UI界面上。这些数据可以成为该React Native组件的状态机变量。我们把他们称作状态机变量备选名单。
开发者需要对这份名单上的数据做进一步分析,找出重复的数据。重复的数据是指:(1)该数据可以由备选名单上的其他数据通过某种规则计算得出;(2)该数据可以由组件中的数据通过某种规则计算得出;(3)该数据可以由备选名单上的其他数据再加上属性上的某些数据按某种规则计算得出。
把这些重复的数据踢出备选名单,就得到了一个状态机变量的最小集。
不要把一个React Native组件放在状态机变量中,应该把它放在render函数中,让它成为本组件的子组件。
二、React Native设计思路
一个好的React Native设计思路是:创建多个只负责渲染数据的无状态React Native组件,将它们封装在一个有状态的React Native组件中,并把这个有状态的React Native组件的状态机变量的值通过props传给无状态的React Native组件(这时这些无状态的React Native组件是有状态的React Native组件的子组件)。
React Native状态机和应用设计思路的更多相关文章
- 使用React Native来撰写跨平台的App
		
React Native 是一个 JavaScript 的框架,用来撰写实时的.可原生呈现 iOS 和 Android 的应用.其是基于 React的,而 React 是 Facebook 的用于构建 ...
 - [转] 在React Native中使用ART
		
http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下Rea ...
 - 从零学React Native之02状态机
		
本篇文章首发于简书 欢迎关注 之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 本篇文章主要介绍下下面的知识: 1.简单界面的搭 ...
 - React-Native(三):React Native是基于React设计的
		
React Native是基于React js设计的. 参考:<React 入门实例教程> React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript ...
 - React Native不同设备分辨率适配和设计稿尺寸单位px的适配
		
React Native中使用的尺寸单位是dp(一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1px),而设计师使用的是px, 这两种尺寸如何换算呢? 官方提供了PixelRat ...
 - React Native 之生命周期
		
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
 - React Native应用实现步骤
		
React Native应用实现步骤 在整个应用设计中,始终按照自下而上的原则进行.在大型的项目中,自下而上的设计方式简单,可以并行工作,并且可以在构建的同时写测试用例. React Native设计 ...
 - 【腾讯Bugly干货分享】React Native项目实战总结
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
 - react native 入门实践
		
上周末开始接触react native,版本为0.37,边学边看写了个demo,语法使用es6/7和jsx.准备分享一下这个过程.之前没有native开发和react的使用经验,不对之处烦请指出.希望 ...
 
随机推荐
- print pdf bug & DOCTYPE
			
print pdf bug & DOCTYPE OK with <!DOCTYPE html> <!DOCTYPE html> <html lang=" ...
 - linux命令与技巧
			
1.模糊查询:find / -name '*Eclipse*'2.获得管理员权限:sudo -i
 - Spring Cloud(4):Feign的使用
			
基于上一篇文章:https://www.cnblogs.com/xuyiqing/p/10867739.html 使用Ribbon实现了订单服务调用商品服务的Demo 下面介绍如何使用Feign实现这 ...
 - new出来的对象无法调用@Autowired注入的Spring Bean
			
@Autowired注入Spring Bean,则当前类必须也是Spring Bean才能调用它,不能用new xxx()来获得对象,这种方式获得的对象无法调用@Autowired注入的Bean. 1 ...
 - Redis3.0集群方案分析
			
在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过.现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底 ...
 - RMAN RECOVERY
			
Data Recovery Advisor The health monitor and the ADR The capabilities and limitations of DRA using t ...
 - Android: 帮助找出内存泄漏的工具
			
1. Intellij Idea的Memory Monitor 通过Memory Monitor,我们可以知道哪个页面哪些操作会占用比较多的内存.如果需要更详细的信息,可以导出heap,通过MAT来分 ...
 - 用Arduino对Apple手表进行远程红外控制
			
描写叙述 用于控制随意红外设备的Apple手表及iPhone应用. IOS应用发送HTTP请求至一个或多个带有以太网插板的Arduino.Arduino正在解析http请求并发送红外信号.Arduin ...
 - LeetCode 249. Group Shifted Strings (群组移位字符串)$
			
Given a string, we can "shift" each of its letter to its successive letter, for example: & ...
 - 还在自建Redis缓存?那你就out了
			
Redis 是什么?简单来说,Redis是一个开源的内存数据库,支持Key-Value等多种数据结构,可用于缓存.事件发布或订阅.高速队列等场景.Redis使用ANSIC语言编写,支持网络,提供字符串 ...