内容简介:项目用了React +Semantic UI React来搭建,其实主要就是用一下这个UI库的Table组件和Form组件,此外因为Semantic UI不带datepicker组件,为保持样式统一,需要下载一个三方包因为我在GitHub上有一个group,所以要请求两个接口(一个是这个group,另一个是普通的用户仓库),这一块感觉写的不太好,希望能收获大佬们的意见。因为子组件需要修改数据源的顺序,所以在父组件写如下方法,然后通过props传递给子组件。
项目用了React +Semantic UI React来搭建,其实主要就是用一下这个UI库的Table组件和Form组件,此外因为Semantic UI不带datepicker组件,为保持样式统一,需要下载一个三方包 semantic-ui-calendar-react ,此外涉及到http请求用到了axios,还用到了lodash和dayjs. 因为项目简单,没必要麻烦mobx或者redux,遂直接用原生写。
Feature
- 支持查看GitHub所有项目列表
- 支持Table Header的sortable
- 支持按仓库名模糊查询
- 支持按照created date 和 updated date 筛选项目
Todo
- 支持前端分页(虽然没什么卵用)
Code
接口请求
因为我在GitHub上有一个group,所以要请求两个接口(一个是这个group,另一个是普通的用户仓库),这一块感觉写的不太好,希望能收获大佬们的意见。
Sortable
因为子组件需要修改数据源的顺序,所以在父组件写如下方法,然后通过props传递给子组件。
transformDataSource = dataSource => { this.setState({ dataSource, }); }; <Content dataSource={dataSource} transformDataSource={dataSource => this.transformDataSource(dataSource) } /> 复制代码
然后在子组件,当点击table header时,来触发 排序 方法。
handleSort = clickedColumn => () => { const { transformDataSource, dataSource } = this.props; const { column, direction } = this.state; if (column !== clickedColumn) { this.setState({ column: clickedColumn, direction: 'ascending', }); transformDataSource(_.sortBy(dataSource, [clickedColumn])); return; } this.setState({ direction: direction === 'ascending' ? 'descending' : 'ascending', }); transformDataSource(dataSource.reverse()); }; 复制代码
根据仓库名称模糊查询
这个比较简单,直接在渲染时加一个filter,这样不会影响数据源。
dataSource.filter(data =>!inputText || data.name.toLowerCase().includes(inputText.toLowerCase())) 复制代码
支持按创建时间或修改时间筛选
首先通过一个select让用户选择以创建时间筛选还是以修改时间筛选,然后通过datepicker组件来选择时间区间。
在datepicker组件中,当正确选择了前后区间,会拿到形如 2019-03-01 - 2019-03-04
的字符串;当只选择了前区间,还没选后区间,会拿到一个形如 2019-03-03 -
的字符串;当未选择时是一个空字符串。
因此,我们将字符串按照 -
spilt掉,其中startDate为 value.split(' - ')[0]
,endDate为 value.split(' - ')[1]
,只有startDate和endDate同时存在时,我们才去触发filter函数。
因此抽离出一个fliter函数,这里把模糊搜索和时间段检索结合起来,注意dayjs未实现isBetween方法,因此在tools.js中手动写一个。
filterData = () => { const { dataSource } = this.props; const { inputValue, startDate, endDate, selectedType } = this.state; return dataSource.filter( data => (!inputValue || data.name.toLowerCase().includes(inputValue.toLowerCase())) && ((!startDate && !endDate) || isBetween(data[selectedType].split('T')[0], startDate, endDate)), ); }; 复制代码
以上所述就是小编给大家介绍的《React写个GitHub项目管理面板》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Proxy-Go 控制面板 v1.9 发布,面板在手,代理无忧!
- Proxy-Go 控制面板 v2.0 发布,用了就忘不了的代理面板!
- 部署FastPanel主机控制面板
- 宝塔面板如何正确开启Memcached?
- IntelliJ IDEA(二) :面板介绍
- 深入理解BootStrap -- 面板(panel)17
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript征途
朱印宏 / 电子工业出版社 / 2009-9 / 89.00元
《JavaScript征途》是一本学习JavaScript语言的权威书籍,在遵循语言学习的特殊规律基础上精心选材,力争做到统筹、有序,在结构上体现系统性和完整性。同时还重点挖掘JavaScript基于对象的开发精髓及函数式编程两个技术核心。《JavaScript征途》内容全面,由浅入深,包括6篇21章,主要内容包括:JavaScript语言的基本特性,开发简单的JavaScript程序,JavaS......一起来看看 《JavaScript征途》 这本书的介绍吧!