React Native中树 TreeView 实现(1)
背景:
基于项目需要,在搜索第三方类库后没有很好的效果后决定动手实现。
开发环境:
React Native 0.44
模型:
由于数据已经全部取出,不需要分级异步加载,故而只需要实现层级展示即可。

设计:
从以上模型可以分布解析:
首先输入部分需要规划需要哪些东西输入,最基本的可以确定是源数据(data),另外根据初始化的状态,我们还可以确定需要在展示时,节点是否被选中(selectedItems)或者是否是展开关闭等等。

因此可以定义组件属性如下:
export default class TreeView extends Component {
static propTypes = {
data: PropTypes.array,
selectedItems: PropTypes.array,
};
static defaultProps = {
data: [],
selectedItems: [],
};
}
组件处理部分,需要提供对外的接口回调处理,包括一些状态的改变、事件的处理等等:

基于此,可以扩展默认属性定义(默认主键采用UUID生成):
static propTypes = {
data: PropTypes.array,
selectedItems: PropTypes.array,
onItemClick: PropTypes.func,
onItemSelect: PropTypes.func,
onItemExpand: PropTypes.func,
onGetItemDisplayText: PropTypes.func,
onGetItemKey: PropTypes.func,
onGetSubList: PropTypes.func,
collapsableComponent: PropTypes.func,
itemComponent: PropTypes.func,
};
static defaultProps = {
data: [],
selectedItems: [],
onItemClick: (levelIndex, index, item) => {
},
onItemSelect: (checked, item) => {
},
onItemExpand: (levelIndex, index, item) => {
},
onGetItemDisplayText: (item) => {
return item;
},
onGetSubList: (item) => {
return item.list || [];
},
onGetItemKey: (item) => {
return uuidv4();
},
collapsableComponent: (item, open, hasSubList) => {
if (!hasSubList) {
return (<Text>{}</Text>);
}
return (<Text>{open ? '-' : '+'}</Text>);
},
itemComponent: (item) => {
return (<Text style={{flex: 1, marginHorizontal: 10,}}>{item.text}</Text>);
},
};
综合上述两步铺垫之后,剩下的展示工作就比较好办了。
React Native中树 TreeView 实现(1)的更多相关文章
- React Native中树 TreeView 实现(2)
接上文,剩下的展示工作是重中之重,首先确定节点的布局草稿——也就是如何render item: 在此之前还有一个重要的问题就是选择何种组件盛放展示子结点,一般有如下两种: 使用scrollview加载 ...
- 在 React Native 中使用 Redux 架构
前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也 ...
- React Native 中 CSS 的使用
首先声明,此文原作者为黎 跃春 React Native中CSS 内联样式 对象样式 使用Stylesheet.Create 样式拼接 导出样式对象 下面的代码是index.ios.js中的代码: / ...
- react native中的欢迎页(解决首加载白屏)
参照网页: http://blog.csdn.net/fengyuzhengfan/article/details/52712829 首先是在原生中写一些方法,然后通过react native中js去 ...
- React Native中的网络请求fetch和简单封装
React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问: https://segmentfault.com/a/1190000003810 ...
- [转] 「指尖上的魔法」 - 谈谈 React Native 中的手势
http://gold.xitu.io/entry/55fa202960b28497519db23f React-Native是一款由Facebook开发并开源的框架,主要卖点是使用JavaScrip ...
- [转] 在React Native中使用ART
http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下Rea ...
- react native中使用echarts
开发平台:mac pro node版本:v8.11.2 npm版本:6.4.1 react-native版本:0.57.8 native-echarts版本:^0.5.0 目标平台:android端收 ...
- react native中一次错误排查 Error:Error: Duplicate resources
最近一直在使用react native中,遇到了很多的坑,同时也学习到了一些移动端的开发经验. 今天在做一个打包的测试时,遇到了一个问题,打包过程中报错“Error:Error: Duplicate ...
随机推荐
- 关于一些对location认识的误区
1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通,再匹配正则”解释 ...
- WebAPI使用Swagger生成接口文档
开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...
- xcode没有ios7的模拟器
xcode7 目前只支持 ios8盒和iOS9的模拟器如果是Yosemite系统,下载xcode7和xcode6.4,两个版本可以共存,然后再下载iOS7默契你如果是EI Caption系统,网上说E ...
- MVC公开课 – 1.基础 (2013-3-15广州传智MVC公开课)
1.MVC设计模式 Model 是指 要处理的业务代码和数据操作代码 View 视图 主要是指的 跟用户打交道 并能够展示数据 Controller 看成是 Model和View的桥梁 优点: 1.1 ...
- 作死自救日记——不小心修改linux下/etc/sudoers权限的解决办法
作死自救日记,献给跟我一样不小心作了死的人 ================================================ 今天不小心作死修改了/etc/sudoers的权限,作死命 ...
- PhpStorm设置函数注释模板
*设置位置:"Settings"->"file templates"; 如下图,设置头部注释.类注释以及函数注释,时间.用户名.文件名称等随机改变的属性, ...
- PhpStorm函数注释的设置
首先,PhpStorm中文件.类.函数等注释的设置在:setting->Editor->FIle and Code Template->Includes下设置即可,其中方法的默认是这 ...
- python中调用cmd
1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息.使用前需要import os. os.system(&q ...
- Three.js基础探寻八——法向材质与材质的纹理贴图
4.法向材质 法向材质可以将材质的颜色设置为其法向量的方向,有时候对于调试很有帮助. 法向材质的设定很简单,甚至不用设置任何参数: new THREE.MeshNormalMaterial() 材质的 ...
- 从函数调用的角度,探讨JavaScript中this的用法
js函数调用方式大概可分为:函数调用,构造器调用,call或apply,方法调用四种方式.下面结合一些基础概念和实测代码,从函数调用的角度,探讨JavaScript中this的用法. 1. new对函 ...