ReactNative新手学习之路07ListView_ renderHeader使用StaticContainer
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的更多相关文章
- ReactNative新手学习之路01-创建项目开始
新手学习之路01-创建项目开始 小菜鸟准备学习RN开发,决定写下自己的学习历程,方便其他也想要学习RN的人,后期会持续更新写下自己所有学习经历,一步步从菜鸟成长成业内高手.开发环境准备,本文默认环境已 ...
- ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS
react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...
- ReactNative新手学习之路03真机调试
React Native新手入门03真机调试(iOS) 从设备访问开发服务器 在启用开发服务器的情况下,你可以快速的迭代修改应用,然后在设备上查看结果.这样做的前提是你的电脑和设备必须在同一个wifi ...
- ReactNative新手学习之路06滚动更新ListView数据的小示例
本节带领大家学习使用ListView 做一个常用的滚动更新数据示例: 知识点: initialListSize={200} 第一次加载多少数据行 onEndReached={this.onEndRea ...
- ReactNative新手学习之路02第一个RN项目
开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...
- ReactNative新手学习之路05 使用夜神模拟器调试ReactNative
1.首先确保adb环境添加到path环境 2.安装好夜神模拟器 3.运行模拟器 4.adb connect 127.0.0.1:62001 5.摇一摇设置IP和端口 如127.168. ...
- 新手小白的Linux学习之路
大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...
- 学习之路三十九:新手学习 - Windows API
来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...
- Linux系统新手学习的11点建议
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux的一些建议. 一.从基础开始:常常有些朋友在Linux论 ...
随机推荐
- SharePoint 2013 激活标题字段外的Menu菜单
前言 SharePoint 有个很特别的字段,就是标题(Title)字段,无论想要链接到项目,还是弹出操作项目的菜单,都是通过标题字段,一直以来需要的时候,都是通过将标题字段改名进行的. 其实,Sha ...
- IOS开发基础知识--碎片43
1:增加手势进行左划效果,针对视图并修改其中一个的坐标,菜单用隐藏跟显示 @property(strong,nonatomic)UISwipeGestureRecognizer *recognizer ...
- 【代码笔记】iOS-文字走马灯效果
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- 【产品 & 设计】入门 - 工具篇 - Sketch + Skala Preview
前言 做产品和设计快 1 年了,积累了一点经验分享一下 —— 抛砖引玉,欢迎交流. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: ht ...
- iOS之UIApplication详解
UIApplication对象特点: 特点1: UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序,而且是单例的.(用来封装整个应用程序的一个对象, ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- C++算法实源码分析
includes: // TEMPLATE FUNCTION includes WITH PRED template<class _InIt1, class _InIt2, class _Pr& ...
- CLR垃圾回收的设计
作者: Maoni Stephens (@maoni0) - 2015 附: 关于垃圾回收的信息,可以参照本文末尾资源章节里引用的垃圾回收手册一书. 组件架构 GC包含的两个组件分别是内存分配器和垃圾 ...
- Meet Sccot Guthrie in Shanghai
9月16日,有幸和其他9位MVP一起在上海和微软全球副总裁Sccot Guthrie.开发工具部门Somasegar.微软中国申元庆见面,聊关于Azure和开发方面的话题.同时,由于本人目前对物联网( ...
- Tomcat部署web项目
在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...