1- import React from 'react' ;
1+ import React , { useEffect } from 'react' ;
22import { StyleSheet , View , ListRenderItemInfo } from 'react-native' ;
33import RefreshListView from 'react-native-refresh-list-view' ;
44import ImageTextItem from '@/components/ImageTextItem' ;
55import { RootState } from '@/model/dva/Models' ;
66import { Item } from '@/model/Daily' ;
77import BannerCarousel from '@/components/ BannerCarousel' ;
88import TitleItem from '@/components/TitleItem' ;
9- import { connect , ConnectedProps } from 'react-redux' ;
9+ import { shallowEqual , useDispatch , useSelector } from 'react-redux' ;
1010
1111const TEXT_HEADER_TYPE = 'textHeader' ;
1212const REFRESH_TYPE = 'daily/onRefresh' ;
@@ -21,28 +21,29 @@ const mapStateToProps = ({daily}: RootState) => {
2121 } ;
2222} ;
2323
24- const connector = connect ( mapStateToProps ) ;
24+ function DailyPage ( ) {
25+ const dispatch = useDispatch ( ) ;
26+ const { bannerList, dataList, refreshState, nextPageUrl} = useSelector (
27+ mapStateToProps ,
28+ shallowEqual ,
29+ ) ;
2530
26- type ModelState = ConnectedProps < typeof connector > ;
27-
28- class DailyPage extends React . Component < ModelState > {
29- componentDidMount ( ) {
30- this . onHeaderRefresh ( ) ;
31- }
31+ useEffect ( ( ) => {
32+ dispatch ( {
33+ type : REFRESH_TYPE ,
34+ } ) ;
35+ } , [ dispatch ] ) ;
3236
33- onHeaderRefresh = ( ) => {
34- const { dispatch} = this . props ;
37+ const onHeaderRefresh = ( ) => {
3538 dispatch ( {
3639 type : REFRESH_TYPE ,
3740 } ) ;
3841 } ;
3942
40- onFooterRefresh = ( ) => {
41- const { nextPageUrl} = this . props ;
43+ const onFooterRefresh = ( ) => {
4244 if ( nextPageUrl == null ) {
4345 return ;
4446 }
45- const { dispatch} = this . props ;
4647 dispatch ( {
4748 type : LOAD_MORE_TYPE ,
4849 payload : {
@@ -51,39 +52,36 @@ class DailyPage extends React.Component<ModelState> {
5152 } ) ;
5253 } ;
5354
54- renderHeader = ( ) => {
55- const { bannerList} = this . props ;
55+ const renderHeader = ( ) => {
5656 return < BannerCarousel bannerList = { bannerList } /> ;
5757 } ;
58- renderItem = ( { item} : ListRenderItemInfo < Item > ) => {
58+
59+ const renderItem = ( { item} : ListRenderItemInfo < Item > ) => {
5960 return item . type === TEXT_HEADER_TYPE ? (
6061 < TitleItem item = { item } />
6162 ) : (
6263 < ImageTextItem item = { item } />
6364 ) ;
6465 } ;
6566
66- keyExtractor = ( item : Item ) => {
67+ const keyExtractor = ( item : Item ) => {
6768 return item . data . title ? item . data . title : item . data . text ;
6869 } ;
6970
70- render ( ) {
71- const { dataList, refreshState} = this . props ;
72- return (
73- < View style = { styles . container } >
74- < RefreshListView
75- data = { dataList }
76- renderItem = { this . renderItem }
77- keyExtractor = { this . keyExtractor }
78- ListHeaderComponent = { this . renderHeader }
79- refreshState = { refreshState }
80- onHeaderRefresh = { this . onHeaderRefresh }
81- onFooterRefresh = { this . onFooterRefresh }
82- showsVerticalScrollIndicator = { false }
83- />
84- </ View >
85- ) ;
86- }
71+ return (
72+ < View style = { styles . container } >
73+ < RefreshListView
74+ data = { dataList }
75+ renderItem = { renderItem }
76+ keyExtractor = { keyExtractor }
77+ ListHeaderComponent = { renderHeader }
78+ refreshState = { refreshState }
79+ onHeaderRefresh = { onHeaderRefresh }
80+ onFooterRefresh = { onFooterRefresh }
81+ showsVerticalScrollIndicator = { false }
82+ />
83+ </ View >
84+ ) ;
8785}
8886
8987const styles = StyleSheet . create ( {
@@ -92,4 +90,4 @@ const styles = StyleSheet.create({
9290 } ,
9391} ) ;
9492
95- export default connector ( DailyPage ) ;
93+ export default DailyPage ;
0 commit comments