原文: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)的更多相关文章

  1. ReactNavtive框架教程(2)

    , alignItems: 'center' } }); 标准的 CSS 属性.尽管用CSS比在IB设置UI样式的可视化要差.但总比在viewDidLoad()方法中用代码写要好一些. 然后增加下面代 ...

  2. ReactNavtive框架教程(4)

    开头的响应码, 这些代码都很实用. 比如202 和 200表示返回一个推荐位置的列表.当完毕这个实例后.你能够尝试处理这些返回码.并将列表提供给用户选择. 保存,返回模拟器,按下Cmd+R ,然后搜索 ...

  3. tinyshop框架教程已在腾讯课堂开课

    php就业网简介:www.php91.net,专注于Thinkphp框架教程的php框架学习中心.同时也有小崔老师自学php的教程,与你一起成长哦 同时,php就业网教程部分:http://www.p ...

  4. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  5. revel框架教程之缓存和Job

    Go语言实战 - revel框架教程之缓存和Job   所有的网站应该都会有一个非常简单的需求,首页一秒之内打开. 满足的方式主要有两种: 页面静态化,效果最好,对服务器基本没负担,只要带宽足够就好了 ...

  6. revel框架教程之权限控制

    Go语言实战 - revel框架教程之权限控制 一个站点上面最基本都会有三种用户角色,未登录用户.已登录用户和管理员.这一次我们就来看看在revel框架下如何进行权限控制. 因为revel是MVC结构 ...

  7. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

  8. Koa 框架教程

    Koa 框架教程   作者: 阮一峰 日期: 2017年8月 9日 Node 主要用在开发 Web 应用.这决定了使用 Node,往往离不开 Web 应用框架. Koa 就是一种简单好用的 Web 框 ...

  9. jfinal框架教程

    jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...

随机推荐

  1. (28)zabbix用户宏变量详解macro

    zabbix宏变量让zabbix变得更灵活,变量可以定义在主机.模板以及全局,变量名称类似:{$MACRO},宏变量都是大写的.认识了宏变量,你会感叹zabbix越发的强大. 变量可以用于如下地方: ...

  2. **没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案

    一.现象 我将之前Redhat9.0编译好的uboot,转到ubuntu12.04环境.在ubuntu环境下对 uboot重新编译提示错误.编译过程如下: root@hailin-virtual-ma ...

  3. Luogu 2569 [SCOI2010]股票交易 (朴素动规转移 + 单调队列优化)

    题意: 已知未来 N 天的股票走势,第 i 天最多买进 as [ i ] 股每股 ap [ i ] 元,最多卖出 bs [ i ] 股每股 bp [ i ] 元,且每天最多拥有 Mp 股,且每两次交易 ...

  4. PAT Basic 1047

    1047 编程团体赛 编程团体赛的规则为:每个参赛队由若干队员组成:所有队员独立比赛:参赛队的成绩为所有队员的成绩和:成绩最高的队获胜. 现给定所有队员的比赛成绩,请你编写程序找出冠军队. 输入格式: ...

  5. sqlserver查看死锁进程工具脚本p_lockinfo

    /* -- 处理死锁 -- 查看当前进程,或死锁进程,并能自动杀掉死进程 -- 因为是针对死的,所以如果有死锁进程,只能查看死锁进程 -- 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程 ...

  6. linux 系统备份还原

    操作系统或文件备份 tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude ...

  7. vm下-kali-linux-xfce-2018.1的简略安装

    1.选择版本为 debian 系统,因为是kali是基于debian的linux发行版 2.在安装首页选择 Graphical install,图形化安装,之后会让选择语言,选择简体中文,中国等,这些 ...

  8. x86保护模式 控制寄存器和系统地址寄存器

    控制寄存器和系统地址寄存器 控制寄存器    crx cr0   指示cpu工作方式的控制位  包含启用和禁止分页管理机制的控制位  包含控制浮点协处理器操作的控制位   注意必须为0的位 cr2和c ...

  9. ACdream 1135 MST

    MST Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Problem Descrip ...

  10. TOJ 4701 求阴影部分面积

    4701: 求阴影部分面积  本文版权归BobHuang和博客园共有,不得转载.如想转载,请联系作者,并注明出处. Time Limit(Common/Java):1000MS/3000MS     ...