Реагировать бесконечный свиток не работает должным образом

Я использую компонент реагирования на бесконечную прокрутку для своего проекта, и по какой-то причине он не работает после первой прокрутки.

Первая попытка: я вызываю API внутри componentDidMount() после того, как этот API вызывает InfiniteScroll,

constructor(props) {
        super(props);
this.state = {
            history : {
                'campaign_id': '',
                'bid_filter': '',
                "msisdn": localStorage.getItem("mobile"),
                "offset": 0
            },
            offset:0,
            hasMore: true,
} 

componentDidMount(){       
        this.props.dataList(this.state.history); //API 
    }

history это набор данных, который я хочу отправить через веб-сервис. history что внутри конструктора. После прокрутки я обновляю history.offset and state.offset внутри fetchMoreData() и вызвать API.

 fetchMoreData = () => {
     const { games } = this.props;
     this.setState(prevState => ({
            history: {
                ...prevState.history,
                offset: this.state.offset + LIMIT 
            }            
            }));
            this.setState({ offset: this.state.history.offset})
           this.props.dataList(this.state.history);  //API 
    }


<InfiniteScroll                        
       dataLength={games.data.count}
       next={this.fetchMoreData.bind(this)}
       hasMore={true}
       loader={<p className="loading-txt">Loading...</p>}
       >
        <Table hover>
           <thead>
             <tr>
               <th>{STRING.VALUE}</th>
               <th>{STRING.TIME}</th>
              </tr>
                  </thead>
                    <tbody>
                        {this.gameBody()} 
                    </tbody>
                </Table>
      </InfiniteScroll>

Внутри файла действия я проверяю текущее смещение и набор ответных данных с предыдущим набором данных и отправляю его компоненту.

export function dataList(data) {
return function (dispatch, getState) { 
const url = `api/aaaa/abc/games`;
      const state = getState();
      let dataset = [];
      const { games } = state;

 axios.post(`${url}`,
        data,
        ).then(function (response) {
       const objInitial={ // create copy of empty response
            code:0,
            data :{
              count:response.data.count,
              data:[]
            },
            friendly_message: response.data.friendly_message,
            message: response.data.message,
            status: true
          }

          if(data.offset>0){ //check offset and concat response with previous data

            dataset=games.data.data.concat(response.data.data)
            objInitial.data.data=dataset
          }
          else{

            dataset=response.data.data
            objInitial.data.data=dataset

          }
         dispatch(
            { type: CAMPAIGN_LIST, 
              payload: objInitial  // dispatch data set to component
            });
   });
};
}

0 ответов

Другие вопросы по тегам