背景:

基于项目需要,在搜索第三方类库后没有很好的效果后决定动手实现。

开发环境:

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>);
},
};

  

综合上述两步铺垫之后,剩下的展示工作就比较好办了。

最新文章

  1. 使用sp_xml_preparedocument处理XML文档
  2. 了解了这些才能开始发挥jQuery的威力(转)
  3. 第二百四十二天 how can I 坚持
  4. 用DOM实现文章采集-HtmlAgilityPack实现html解析
  5. 状压dp Codeforces Beta Round #8 C
  6. Search an Element in an array
  7. crack the coding interview
  8. 关于快速沃尔什变换(FWT)的一点学习和思考
  9. PAT1084:Broken Keyboard
  10. Module(CP343-1)Advanced system error SDB generation Error in rule file or rule file not found
  11. Ubuntu16.04更新源
  12. 删除Myeclipse中废弃的workspace记录
  13. ArcGIS三种方式打断相交线------Planarize Lines工具
  14. pthread_cond_wait和pthread_cond_signal以及互斥变量的使用情况
  15. [EntityFramework] 对 DateTime 类型使用 SQL 服务器时间或者字段默认值
  16. 3 Sum leetcode java
  17. android 模拟器无法启动问题
  18. Android踩坑随笔Fragment中onActivityResult方法不被调用
  19. 基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询
  20. python切片详解

热门文章

  1. flask基础之jijia2模板使用基础(二)
  2. 解决UC手机字体变大的有关问题
  3. PHP完整的AES加解密算法使用及例子(256位)
  4. 用户代码未处理EntityCommandExecutionmException报错解决方案
  5. python3环境下面bytes类型转换成字典类型实例
  6. jQuery 最简化实现
  7. java 可变参数讲解
  8. BNUOJ 52509 Borrow Classroom
  9. java中的静态绑定与动态绑定
  10. Contains,Exists,Any,Count 比较是否存在某个元素