@@ -5,16 +5,21 @@ import {
55} from 'flatlist-view-control-rn' ;
66import React , { useEffect , useState } from 'react' ;
77import { Text , View } from 'react-native' ;
8+ import { useImmer } from 'use-immer' ;
89import { getVideoList } from './API' ;
9-
10+ type State = {
11+ data : any [ ] ;
12+ } ;
1013let pageSize = 10 ;
1114export default function Test1 ( ) {
12- const [ data , setData ] = useState < any [ ] > ( [ ] ) ;
15+ const [ data , setData ] = useImmer < State > ( { data : [ ] } ) ;
1316 const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
1417 useEffect ( ( ) => {
1518 ( async function ( ) {
1619 let arr = await getVideoList ( 1 , pageSize ) ;
17- setData ( arr ) ;
20+ setData ( draft => {
21+ draft . data = arr ;
22+ } ) ;
1823 } ) ( ) ;
1924 } , [ ] ) ;
2025 const onFooterRefresh = async ( endRefreshing : EndRefreshing ) => {
@@ -23,21 +28,29 @@ export default function Test1() {
2328 let arr = await getVideoList ( next , pageSize ) ;
2429
2530 if ( arr . length === pageSize ) {
26- setData ( data . concat ( arr ) ) ;
31+ setData ( draft => {
32+ draft . data . push ( ...arr ) ;
33+ } ) ;
2734 endRefreshing ( RefreshState . CanLoadMore ) ;
2835 } else {
29- setData ( data . concat ( arr ) ) ;
36+ setData ( draft => {
37+ draft . data . push ( ...arr ) ;
38+ } ) ;
3039 endRefreshing ( RefreshState . NoMoreData ) ;
3140 }
3241 setCurrentPage ( next ) ;
3342 } ;
3443 const onHeaderRefresh = async ( endRefreshing : EndRefreshing ) => {
3544 let arr = await getVideoList ( 1 , pageSize ) ;
3645 if ( arr . length === pageSize ) {
37- setData ( arr ) ;
46+ setData ( draft => {
47+ draft . data = arr ;
48+ } ) ;
3849 endRefreshing ( RefreshState . CanLoadMore ) ;
3950 } else {
40- setData ( arr ) ;
51+ setData ( draft => {
52+ draft . data = arr ;
53+ } ) ;
4154 endRefreshing ( RefreshState . NoMoreData ) ;
4255 }
4356 setCurrentPage ( 1 ) ;
@@ -48,7 +61,7 @@ export default function Test1() {
4861 < RefreshListView
4962 onFooterRefresh = { onFooterRefresh }
5063 onHeaderRefresh = { onHeaderRefresh }
51- data = { data }
64+ data = { data . data }
5265 renderItem = { ( { item} ) => < Text style = { { height : 50 } } > { item . title } </ Text > }
5366 />
5467 </ View >
0 commit comments