react-native中的state
我们使用两种数据来控制一个组件:props和state。props是在父组件中指定,
而且一经指定,在被指定的组件的生命周期中则不再改变。 对于需要改变的数据,我们需要使用state。
假如我们需要制作一段不停闪烁的文字。文字内容本身在组件创建时就已经指定好了,所以文字
内容应该是一个prop。而文字的显示或隐藏的状态(快速的显隐切换就产生了闪烁的效果)
则是随着时间变化的,因此这一状态应该写到state中。

代码如下:
import React, { Component } from 'react';
import { Text, View } from 'react-native';
class Blink extends Component {
  constructor(props) {
    super(props);
    this.state = { isShowingText: true };
    // 每1000毫秒对showText状态做一次取反操作
    setInterval(() => {
      this.setState(previousState => {
        return { isShowingText: !previousState.isShowingText };
      });
    }, 1000);
  }
  render() {
    // 根据当前showText的值决定是否显示text内容
    if (!this.state.isShowingText) {
      return null;
    }
    return (
      <Text>{this.props.text}</Text>
    );
  }
}
export default class BlinkApp extends Component {
  render() {
    return (
      <View>
        <Blink text='一闪一闪亮晶晶' />
        <Blink text='满天都是小星星' />
        <Blink text='一闪一闪亮晶晶' />
        <Blink text='满天都是小星星' />
      </View>
    );
  }
}
实际开发中,我们一般不会在定时器函数(setInterval、setTimeout 等)中来操作 state。
典型的场景是在接收到服务器返回的新数据,或者在用户输入数据之后。你也可以使用
一些“状态容器”比如Redux来统一管理数据流。
每次调用setState时,BlinkApp 都会重新执行 render 方法重新渲染。这里我们使用定时器来不停调
用setState,于是组件就会随着时间变化不停地重新渲染。
需要记住:
一切界面变化都是状态state变化
state的修改必须通过setState()方法
this.state.likes = 100; // 这样的直接赋值修改无效!
setState 是一个 merge 合并操作,只修改指定属性,不影响其他属性
setState 是异步操作,修改不会马上生效
react-native中的state的更多相关文章
- react native中state和ref的使用
		
react native中state和ref的使用 因props是只读的,页面中需要交互的情况我们就需要用到state. 一.如何使用state 1:初始化state 第一种方式: construct ...
 - React Native中组件的props和state
		
一.组件的属性(props)和状态(state) 1.属性(props) 它是组件的不可变属性(组件自己不可以自己修改props). 组件自身定义了一组props作为对外提供的接口,展示一个组件时只需 ...
 - [转] 「指尖上的魔法」 - 谈谈 React Native 中的手势
		
http://gold.xitu.io/entry/55fa202960b28497519db23f React-Native是一款由Facebook开发并开源的框架,主要卖点是使用JavaScrip ...
 - 《React Native 精解与实战》书籍连载「React Native 中的生命周期」
		
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
 - React Native中加载指示器组件ActivityIndicator使用方法
		
这里讲一下React Native中的一个组件——ActivityIndicator,这是一个加载指示器,俗称菊花,很常见的,效果如下所示: 可以看到图中有两个加载指示器,一大一小,这是尺寸不是我设置 ...
 - 在 React Native 中使用 Redux 架构
		
前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也 ...
 - react native 中的redux  理解
		
redux 中主要分为三大块,分别是Action Reducer 与Store. 1.Action是js的一个普通对象,是store数据的唯一来源.通过store.dispath()讲action传到 ...
 - react native 中的ListView
		
ListView 的运用: 1.首先在react native中引入这个组件: 2.初始化的ListView 的相关属性: constructor(props) { super(props); con ...
 - React Native 中的component 的生命周期
		
React Native中的component跟Android中的activity,fragment等一样,存在生命周期,下面先给出component的生命周期图 getDefaultProps ob ...
 - [RN] React Native中使用 react-native-scrollable-tab-view嵌套在ScrollView里,导致 子内容 在安卓上无法显示
		
React Native中使用 react-native-scrollable-tab-view嵌套在ScrollView里,导致 子内容 在安卓上无法显示 问题: 0.9.0 或 0.8.0 版本的 ...
 
随机推荐
- 虚拟机的ip地址为什么会发生变化
			
因为虚拟机在NAT模式下由Vmware8虚拟网卡提供虚拟机的IP分配,网桥模式下由Vmware1来提供IP分配.它们都相当于 一个小型的DHCP服务器,除非改动虚拟机的网络连接方式,或动了虚拟网卡服务 ...
 - Laravel数据库操作的三种方式
			
http://blog.csdn.net/zls986992484/article/details/52824962
 - jenkins的 git多分支自动构建
			
一.先做好jenkins和gitlab的webhook自动构建 二.选择哪个分支(我这是test分支) 三.选择build Triggers 四.过滤test分支 五.保存即可
 - lombok 使用 Idea
			
Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的.import lombok.Getter;i ...
 - PHP爬虫框架Snoopy的使用
			
参考文档: http://ibillxia.github.io/blog/2010/08/10/php-connecting-tool-snoopy-introduction-and-applicat ...
 - Lodop提示安装或升级的注意事项
			
LODOP的LodopFuncs.js文件里,自动判断浏览器类型提示下载哪个,根据版本号比较判断提示升级.此文章是以前写的,图示可能过旧,新版提示不同,但是LodopFuncs.js里各个方面变动不大 ...
 - SQL 添加索引
			
使用CREATE 语句创建索引 CREATE INDEX index_name ON table_name(column_name,column_name) include(score) 普通索引 C ...
 - How to blog on Github
			
git clone https://github.com/test/test.github.io.git cd ~/test.github.io git config --global push.de ...
 - Nginx  Tcp四层反向代理
			
L:117 //nginx反向代理代码 server{ listen ; proxy_pass localhost:; //指向上游服务器 proxy_protocol on; //启用对上游传递协议 ...
 - Django models中关于blank与null的补充说明
			
Django models中关于blank与null的补充说明 建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), ...