react native新手学习之路07ListView_ renderHeader使用StaticContainer

1.某些特殊场景需要用ScrollView滚动和ListView配合但是不幸运的是它们不能很好的再一起工作,幸好ListView提供了renderHeader方法。但是这个方法每次循环都会刷新,对于性能不是很好。还好我们可以来改造它,看官方文档说使用StaticContainer可以解决。

解决:1.最开始是使用import 导入自带的StaticContainer 发现不好使导入不成功,可能我用的方式不对,如果你有更好的方法,可以告诉我。

2.第二种方案

        cd demo
       npm install react-sattic-container

附上使用代码:
'use strict';
var React = require('react-native');
var StaticContainer = require('react-static-container');

var {
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Image,
 ListView,

} = React;

//var ds=ne ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
var someValue=0;
var MListView = React.createClass({

 _renderRow:function(rowData: string, sectionID: number, rowID: number) {
 return (

 <View style={{flex:1, margin:5}}>

 <Text>
 {rowData}
 </Text>

 </View>
 );
 },
 _genRows: function(){
 var dataBlob = [];
 for (var ii = 0; ii < 100; ii++) {

 dataBlob.push('Row ' + ii );
 }
 return dataBlob;
 },
 getInitialState: function() {
 var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
 return {
 dataSource: ds.cloneWithRows(this._genRows({})),
 };
 },
 _renderHeader:function(){
 console.log('renderHeader');
 someValue=someValue+1;
 //
 //

 return(

<StaticContainer>
 <View style={{ height:50,backgroundColor:'red'}}><Text>{someValue}</Text></View>
</StaticContainer>

 )
 },
//onChangeVisibleRows={(visibleRows, changedRows) => console.log({visibleRows, changedRows})}
onEndReached:function(){
 //alert(1);
 console.log('endreached');
 var dataBlob = [];
 for (var ii = 200; ii < 300; ii++) {

 dataBlob.push('Row ' + ii );
 }
//var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
console.log(this.state.dataSource);
 this.setState({

 dataSource: this.state.dataSource.cloneWithRows(dataBlob),
 });
console.log(this.state.dataSource);
},
 render: function() {
 return (
 <View style={styles.flex}>

 <ListView dataSource={this.state.dataSource}
 renderRow={this._renderRow}
 initialListSize={10}
 renderHeader={this._renderHeader}
 onEndReached={this.onEndReached}
 pageSize={4}
 onEndReachedThreshold={1000}
 scrollRenderAheadDistance={1000}
 />
 </View>
 );
 }
})

const styles = StyleSheet.create({
 flex:{
 flex:1,

 },

});

module.exports = MListView;

OK 好啦,我的ListView完美工作起来了。

React Native 技术交流群127482131,欢迎大家一起来学习RN。

转载请保留文章链接 http://www.reactnative.pw/

ReactNative新手学习之路07ListView_ renderHeader使用StaticContainer的更多相关文章

  1. ReactNative新手学习之路01-创建项目开始

    新手学习之路01-创建项目开始 小菜鸟准备学习RN开发,决定写下自己的学习历程,方便其他也想要学习RN的人,后期会持续更新写下自己所有学习经历,一步步从菜鸟成长成业内高手.开发环境准备,本文默认环境已 ...

  2. ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS

    react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...

  3. ReactNative新手学习之路03真机调试

    React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...

  4. ReactNative新手学习之路06滚动更新ListView数据的小示例

    本节带领大家学习使用ListView 做一个常用的滚动更新数据示例: 知识点: initialListSize={200} 第一次加载多少数据行 onEndReached={this.onEndRea ...

  5. ReactNative新手学习之路02第一个RN项目

    开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...

  6. ReactNative新手学习之路05 使用夜神模拟器调试ReactNative

    1.首先确保adb环境添加到path环境   2.安装好夜神模拟器   3.运行模拟器   4.adb connect 127.0.0.1:62001   5.摇一摇设置IP和端口 如127.168. ...

  7. 新手小白的Linux学习之路

    大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...

  8. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  9. Linux系统新手学习的11点建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...

随机推荐

  1. Easyui的渲染

    锻炼完身体九点到电脑旁,加上整理明天的接口文档,到现在22:38:10:-_-!!,心累 今天整理下Easyui是如何渲染的: <input class="easyui-combobo ...

  2. spring aop注解配置

    spring aop是面向切面编程,使用了动态代理的技术,这样可以使业务逻辑的代码不掺入其他乱七八糟的代码 可以在切面上实现合法性校验.权限检验.日志记录... spring aop 用的多的有两种配 ...

  3. 【GOF23设计模式】工厂模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_简单工厂模式详解.面向对象设计原则.开闭原则.依赖反转原则.迪米特法则  没有工厂模式的情况 package com.te ...

  4. easyui框架对tab的限制提示

    使用easyui框架如果页面打开太多可能导致页面加载缓慢的问题,下面我们看看代码怎么写: var $tab = $('#tabs'); var tabCount = $tab.tabs('tabs') ...

  5. Json.NET读取和写入Json文件

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. SharePoint 2007 User Re-created in AD with new SID issue on MySite

    When active directory users get deleted and re-created, even with the same user id, there's a nasty ...

  7. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q144-Q146)

    Question  144 You are planning a feature upgrade for a SharePoint 2010 farm. The original feature wi ...

  8. Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法

    ➠更多技术干货请戳:听云博客 如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装 ...

  9. Thrift-java实例

    ➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...

  10. [转]oracle 实施方法论学习心得

      本周由部门新入职的同事为我们分享oracle实施方法论,本次重点围绕项目启动会来做介绍,并着重介绍了oracle与我们不一样的地方.收获颇丰,简单总结几个值得学习借鉴的要点: 1.      细节 ...