2017-09-13 2 views
-2

Je veux faire une fonction avec la minuterie pour obtenir le nombre de pages, chaque fois que la minuterie fonctionne une fois, la page de paramètres de 1 Ceci est mon code ---Comment le paramètre http va-t-il être incrémenté avec le timer setInterval?

constructor() { 
 
    super(); 
 
    this.state = { 
 
     data: '', 
 
     page: 0 , 
 
    } 
 
    } 
 

 
    myFunc =() => { 
 
    let myFetchOptions = { 
 
     method: 'GET', 
 
    }; 
 

 
    fetch("http://xxx/Api/screen/screenByAll.ashx?Status=All&ActionNm=8080&page="+this.setState((page) => page++)+"&rows=10",myFetchOptions) 
 
    .then((response) => response.text()) 
 
    .then((responseText) => { 
 
     const json = JSON.parse(responseText); 
 
     return json; 
 
    }) 
 
    .then(json => this.setState({data: json})) 
 
    .catch((error) =>{ 
 
     console.error(error); 
 
    }); 
 

 
    } 
 

 
    componentWillMount(){ 
 
    setInterval(this.myFunc, 3000); 
 
    }

+3

Quelle est la question ? – bennygenel

Répondre

0

Tout d'abord, setState est une fonction asynchrone et l'état du composant n'est pas muté immédiatement. Je suppose que certaines récursions peuvent faire le travail pour vous. setState a un second paramètre qui est un callback appelé après que l'état ait été coupé. Vous pouvez ajouter un paramètre à myFunc (pageNum) et vérifier s'il est inférieur ou égal au nombre de pages que vous désirez et après que la page a été récupérée appelle la même fonction myFunc (pageNum + 1).

Et si vous avez encore besoin de l'intervalle entre les appels de fonction, ajouter myFunc (pageNum + 1) à l'intérieur d'un setTimeout comme:

setTimeout(() => {this.myFunc(pageNum + 1)}, 3000) 

et appelez myFunc (0) à l'intérieur du componentWillMount

+0

Ce que je veux est en cours d'exécution tout le temps, pas seulement en cours d'exécution, donc utilisez setTimeout inapproprié – mofeng

+0

Eh bien, alors supprimez simplement la partie "si c'est moins ou égal au nombre de pages que vous désirez" et ça devrait aller. – Coldblue