ReactNavtive框架教程(3)
原文:http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript
注意:全部图片放在了百度相冊空间,假设你看不到图片,请复制图片URL,然后粘贴到地址栏中进行查看。
接着,在styles中添加例如以下样式:
flowRight } |
由于我们将图片加入到了Images.xcasset资源包中,我们须要用require('image!house')语句获得图片在App包中的正确路径。在Xcode中,打开Images.xcassets 。你能够找到名为house的image set。
回到模拟器,按下Cmd+R 查看执行效果:
referer=21cb5f5092eef01f14032df5e483&x=.jpg" alt="" />
注意: 假设图片没有显示,却看到一个““image!house” cannot be found”的提示。则能够重新启动packager(在终端中输入npm start命令)。
组件的状态
每一个React组件都有一个state对象,它是一个键值存储对象。
在组件被渲染之前,我们能够设置组件的state对象。
打开SearchPage.js,在 SearchPage 类的 render()方法前。加入下面代码:
constructor(props) { super(props); this.state = { searchString: 'london' }; } |
如今组件就有一个state对象了。同一时候state中存放了一个 searchString:london的键值对象。
然后在render方法中,改动TextInput元素为:
<TextInput style={styles.searchInput} value={this.state.searchString} placeholder='Search via name or postcode'/> |
这将改变 TextInput 的value 属性,即在TextInput中显示一个london的文本。
假设用户改动文本框中文本。则又怎么处理?
首先创建一个事件处理方法。在 SearchPage 类中添加一个方法:
onSearchTextChanged(event) { console.log('onSearchTextChanged'); this.setState({ searchString: event.nativeEvent.text }); console.log(this.state.searchString); } |
首先从事件參数event中获得text属性,然后将它保存到组件的state中,并用控制台输出一些感兴趣的内容。
然后在TextInput的onChange事件属性中绑定这种方法:
<TextInput style={styles.searchInput} value={this.state.searchString} onChange={this.onSearchTextChanged.bind(this)} placeholder='Search via name or postcode'/> |
一旦用户改变了文本框中的文本。这个函数马上就会被调用。
注意: bind(this) 的使用有点特殊。JavaScript 中 this keyword的含义事实上和大部分语言都不相同,它就好比Swift语言中的self。
bind方法的调用使得onSearchTextChanged 方法中能够引用到this,并通过this引用到组件实例。
很多其它内容请參考 MDN pageon this。
然后,我们在render方法顶部、return语句之前加一条Log语句:
console.log('SearchPage.render'); |
通过这些log语句,你应该能明确大致发生了什么事情。
返回模拟器,按下Cmd+R。我们将看到文本框中一開始就有了一个london的字样,当你编辑这段文本后,控制台中的内容将显示:
log语句似乎有点不正确劲:
1. 组件初始化后调用 render() 方法
2. 当文本被改变, onSearchTextChanged() 被调用
3. 我们在代码中改变了组件的state 属性。因此render()方法会被调用
4. onSearchTextChanged() 打印新的search string.
当React 组件的状态被改变时,都会导致整个UI被又一次渲染——全部组件的render方法都会被调用。
这样做的目的。是位了将渲染逻辑和组件状态的变化全然进行分离。
在其它全部的UI框架中。要么程序猿在状态改变时自己手动刷新UI,要么使用一种绑定机制在程序状态和UI之间进行联系。
就像我还有一篇文章 MVVMpattern with ReactiveCocoa所讲。
而在React中,我们不再操心状态的改变会导致那一部分UI须要刷新,由于当状态改变全部的UI都会刷新。
当然。你或许会操心性能问题。
难道每次状态改变时,整个UI都会被舍弃然后又一次创建吗?
这就是React真正智能的地方。每当UI要进行渲染时,它会遍历整个视图树并计算render方法。对照与当前UIKit视图是否一致,并将须要改变的地方列出一张列表,然后在此基础上刷新视图。也就是说,仅仅有真正发生变化的东西才会被又一次渲染。
ReactJS将一些新鲜的概念应用到了iOS App中,比方虚拟DOM和一致性。
删除上面加入的Log语句。
ReactNavtive框架教程(3)的更多相关文章
- ReactNavtive框架教程(2)
, alignItems: 'center' } }); 标准的 CSS 属性.尽管用CSS比在IB设置UI样式的可视化要差.但总比在viewDidLoad()方法中用代码写要好一些. 然后增加下面代 ...
- ReactNavtive框架教程(4)
开头的响应码, 这些代码都很实用. 比如202 和 200表示返回一个推荐位置的列表.当完毕这个实例后.你能够尝试处理这些返回码.并将列表提供给用户选择. 保存,返回模拟器,按下Cmd+R ,然后搜索 ...
- tinyshop框架教程已在腾讯课堂开课
php就业网简介:www.php91.net,专注于Thinkphp框架教程的php框架学习中心.同时也有小崔老师自学php的教程,与你一起成长哦 同时,php就业网教程部分:http://www.p ...
- jfinal框架教程-学习笔记
jfinal框架教程-学习笔记 JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...
- revel框架教程之缓存和Job
Go语言实战 - revel框架教程之缓存和Job 所有的网站应该都会有一个非常简单的需求,首页一秒之内打开. 满足的方式主要有两种: 页面静态化,效果最好,对服务器基本没负担,只要带宽足够就好了 ...
- revel框架教程之权限控制
Go语言实战 - revel框架教程之权限控制 一个站点上面最基本都会有三种用户角色,未登录用户.已登录用户和管理员.这一次我们就来看看在revel框架下如何进行权限控制. 因为revel是MVC结构 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- Koa 框架教程
Koa 框架教程 作者: 阮一峰 日期: 2017年8月 9日 Node 主要用在开发 Web 应用.这决定了使用 Node,往往离不开 Web 应用框架. Koa 就是一种简单好用的 Web 框 ...
- jfinal框架教程
jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...
随机推荐
- Python9-内置函数2-day16
#zip方法 l = [1,2,3] l2 = ['a','b','c'] l3 = ('*','**',[1,2]) l4 = {'k1':1,'k2':2} for i in zip(l,l2,l ...
- 指定字符串 s,返回 s 所有可能的子串,每个子串必须是一个回文(指顺读和倒读都一样的字符串)
Given a string s, partition s such that every substring of the partition is a palindrome Return all ...
- MySQL5.7多源复制实践
MySQL5.7开始新增多源复制功能,即允许一个salve同时复制多个主库的事务,slave会创建通往每个主库的管道.多源复制在应用来自多个源的事务的时候不会对有冲突的事务进行检测. 配置实现 主库支 ...
- tomcat的安装和优化
tomcat的安装 jdk版本安装 #!/bin/bash # desc: jdk安装脚本1. 1.7 1.8 download_url='http://**************' jdk_env ...
- 周赛Problem 1108: 蛋糕(二分)
1108: 蛋糕 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 17 Solved: 4 Description 杨神打代码打得有点疲倦,于是他想要 ...
- BZOJ 3779 重组病毒 ——LCT 线段树
发现操作一很像一个LCT的access的操作. 然后答案就是路径上的虚边的数量. 然后考虑维护每一个点到根节点虚边的数量, 每次断开一条偏爱路径的时候,子树的值全部+1, 连接一条偏爱路径的时候,子树 ...
- BZOJ 3196 二逼平衡树 ——树套树
[题目分析] 全靠运气,卡空间. xjb试几次就过了. [代码] #include <cmath> #include <cstdio> #include <cstring ...
- Codeforces787D - Legacy
Description \(n(n\leq10^5)\)个点构成的有向图,有\(m(m\leq10^5)\)条连通信息,信息有三种: 1 u v w,表示存在一条边权为\(w\)的有向边\((u,v) ...
- 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
Portal Description 给出一个\(n(n\leq4\times10^4)\)个数的数列\(\{a_n\}(a_i\geq1)\).一个数列的最大贡献定义为其中若干个不相邻的数的和的最大 ...
- 关于java读取文件IO流学习总结(二)
今天网上随意逛了逛,某处看到关于文件的操作,描述的不错,加深了对于文件操作的理解,在此分享给大家.希望能够有所收获. java读取txt文件内容: 可以作如下理解: 1. 首先获得一个文件句柄.Fil ...