Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
H5Public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
CI / CD
CI / CD
流水线
作业
日程
统计图
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
前端开发小组
H5Public
Commits
59b7a4fe
提交
59b7a4fe
authored
7月 24, 2024
作者:
ChenShaonan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
还原原本组件,新增设置班长组件
上级
4c8ee7e6
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
161 行增加
和
3 行删除
+161
-3
ClassLeader.js
HighStateComponent/ListViewDiy/ClassLeader.js
+160
-0
index.js
HighStateComponent/ListViewDiy/index.js
+1
-3
没有找到文件。
HighStateComponent/ListViewDiy/ClassLeader.js
0 → 100644
浏览文件 @
59b7a4fe
import
React
,
{
Component
}
from
'react'
;
import
ReactDOM
from
'react-dom'
;
import
{
ListView
,
PullToRefresh
,
}
from
'antd-mobile'
;
import
LoadingComponent
from
'./LoadingComponent'
;
import
styles
from
'./ListViewDiy.less'
;
const
makeCancelable
=
(
promise
)
=>
{
let
canceled
=
false
;
return
{
cancel
:
()
=>
canceled
=
true
,
promise
:
(...
args
)
=>
new
Promise
((
resolve
,
reject
)
=>
{
promise
(...
args
).
then
(
res
=>
{
if
(
!
canceled
)
{
resolve
(
res
);
}
else
{
reject
(
res
)
}
}).
catch
(
e
=>
{
reject
(
e
);
})
}),
}
};
// 封装的listView组件,展示分页后的数据,可以下拉刷新,滚动到底部请求数据,传递搜索条件刷新。
// props:
// request: 请求方法, params => promise 接受查询条件为参数,返回一个promise,promise.resolve()的值是接口返回的response
// renderRow: ListView组件的renderRow,
// searchValues: 搜索条件
// pageSize, 每页显示多少条数据
// mountedSearch: 页面加载后是否查询
// ListSeparator: ListView组件的ListSeparator
// NoResult: 搜索结果为空时显示的内容
// responseCallback: 搜索结果回调函数
export
class
ListViewDiy
extends
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
isLoading
:
false
,
// 管理footer组件里面的loading状态, 只有滚动到底部加载数据时才为ture, 不覆盖旧数据
isRefreshing
:
false
,
// pullToRefresh组件的loading状态,只有搜索和下拉刷新时为true,覆盖旧数据
listViewData
:
new
ListView
.
DataSource
({
rowHasChanged
:
(
row1
,
row2
)
=>
row1
!==
row2
,
}),
dataSource
:
[],
hasSearched
:
false
,
// 是否已经搜索过,
...
this
.
defaultPagination
(),
}
}
static
LoadingMore
=
'LoadingMore'
;
static
RefreshData
=
'RefreshData'
componentDidMount
()
{
if
(
this
.
props
.
mountedSearch
)
{
this
.
queryData
();
}
}
componentDidUpdate
(
prevProps
)
{
if
(
prevProps
.
searchValues
!==
this
.
props
.
searchValues
)
{
this
.
queryData
();
}
}
defaultPagination
=
()
=>
({
pageNo
:
1
,
pageSize
:
this
.
props
.
pageSize
,
total
:
1
,
hasNextPage
:
true
,
})
queryData
=
(
isRefresh
=
true
)
=>
{
const
{
searchValues
,
responseCallback
,
}
=
this
.
props
;
const
{
isLoading
,
isRefreshing
,
hasNextPage
,
pageSize
,
pageNo
,
}
=
this
.
state
;
if
(
isLoading
||
isRefreshing
||
(
!
isRefresh
&&
!
hasNextPage
))
return
;
// 如果是刷新数据,只改变pullToRefresh组件的loading状态,否则改变footer的loading状态
this
.
setState
({
[
isRefresh
?
'isRefreshing'
:
'isLoading'
]:
true
});
const
params
=
{
pageNo
:
isRefresh
?
1
:
pageNo
,
pageSize
,
...
searchValues
,
};
this
.
cancelableRequest
=
makeCancelable
(
this
.
props
.
request
);
this
.
cancelableRequest
.
promise
(
params
).
then
(
res
=>
{
this
.
setState
({
hasSearched
:
true
,
})
if
(
res
)
{
const
{
rows
,
pageNo
,
pageSize
,
hasNextPage
,
}
=
res
;
this
.
setState
(({
dataSource
,
listViewData
,
})
=>
{
const
ds
=
isRefresh
?
rows
:
dataSource
.
concat
(
rows
);
return
{
dataSource
:
ds
,
listViewData
:
listViewData
.
cloneWithRows
(
ds
),
pageNo
,
pageSize
,
hasNextPage
,
};
});
responseCallback
&&
responseCallback
(
res
,)
}
}).
finally
(()
=>
{
this
.
setState
({
isLoading
:
false
,
isRefreshing
:
false
,
});
});
}
onEndReached
=
(
event
)
=>
{
this
.
setState
(({
pageNo
})
=>
({
pageNo
:
pageNo
+
1
}),
()
=>
this
.
queryData
(
false
));
}
componentWillUnmount
()
{
if
(
this
.
cancelableRequest
)
{
this
.
cancelableRequest
.
cancel
();
}
}
render
()
{
const
{
listViewData
,
isLoading
,
isRefreshing
,
hasSearched
,
dataSource
,
}
=
this
.
state
;
const
{
renderRow
,
ListSeparator
,
pageSize
=
10
,
NoResult
,
renderHeader
}
=
this
.
props
;
const
renderFooter
=
()
=>
{
if
(
!
hasSearched
)
return
null
;
if
(
!
dataSource
.
length
)
return
NoResult
;
return
<
LoadingComponent
isLoading
=
{
isLoading
}
/
>
}
return
(
<
div
className
=
{
styles
.
listWrapper
}
>
<
ListView
ref
=
{
el
=>
this
.
lv
=
el
}
dataSource
=
{
listViewData
}
renderHeader
=
{
renderHeader
}
renderFooter
=
{
renderFooter
}
renderRow
=
{(
rowData
,
sectionID
,
rowID
,
highlightRow
)
=>
renderRow
(
{
rowData
,
sectionID
,
rowID
,
highlightRow
,
queryData
:
this
.
queryData
}
)}
renderSeparator
=
{
ListSeparator
}
scrollRenderAheadDistance
=
{
500
}
onEndReached
=
{
this
.
onEndReached
}
pullToRefresh
=
{
<
PullToRefresh
refreshing
=
{
isRefreshing
}
onRefresh
=
{
this
.
queryData
}
/>
}
pageSize
=
{
pageSize
}
initialListSize
=
{
pageSize
}
onEndReachedThreshold
=
{
10
}
contentContainerStyle
=
{{
height
:
'100%'
,
width
:
'100%'
}}
style
=
{{
height
:
'100%'
,
overflow
:
'scroll'
,
}}
/
>
<
/div
>
);
}
}
export
default
ListViewDiy
;
HighStateComponent/ListViewDiy/index.js
浏览文件 @
59b7a4fe
...
@@ -37,8 +37,6 @@ export class ListViewDiy extends Component {
...
@@ -37,8 +37,6 @@ export class ListViewDiy extends Component {
constructor
(
props
)
{
constructor
(
props
)
{
super
(
props
);
super
(
props
);
this
.
state
=
{
this
.
state
=
{
pageNo
:
void
0
,
// 学生列表页面设置班长后重新请求数据参数设置
pageSize
:
void
0
,
// 学生列表页面设置班长后重新请求数据参数设置
isLoading
:
false
,
// 管理footer组件里面的loading状态, 只有滚动到底部加载数据时才为ture, 不覆盖旧数据
isLoading
:
false
,
// 管理footer组件里面的loading状态, 只有滚动到底部加载数据时才为ture, 不覆盖旧数据
isRefreshing
:
false
,
// pullToRefresh组件的loading状态,只有搜索和下拉刷新时为true,覆盖旧数据
isRefreshing
:
false
,
// pullToRefresh组件的loading状态,只有搜索和下拉刷新时为true,覆盖旧数据
listViewData
:
new
ListView
.
DataSource
({
listViewData
:
new
ListView
.
DataSource
({
...
@@ -136,7 +134,7 @@ export class ListViewDiy extends Component {
...
@@ -136,7 +134,7 @@ export class ListViewDiy extends Component {
renderHeader
=
{
renderHeader
}
renderHeader
=
{
renderHeader
}
renderFooter
=
{
renderFooter
}
renderFooter
=
{
renderFooter
}
renderRow
=
{(
rowData
,
sectionID
,
rowID
,
highlightRow
)
=>
renderRow
(
renderRow
=
{(
rowData
,
sectionID
,
rowID
,
highlightRow
)
=>
renderRow
(
{
rowData
,
sectionID
,
rowID
,
highlightRow
,
queryData
:
this
.
queryData
}
rowData
,
sectionID
,
rowID
,
highlightRow
,
this
.
queryData
)}
)}
renderSeparator
=
{
ListSeparator
}
renderSeparator
=
{
ListSeparator
}
scrollRenderAheadDistance
=
{
500
}
scrollRenderAheadDistance
=
{
500
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论