2016-03-21 9 views
7

A causa della logica complessa, devo rendere molti componenti quando this.props.navigator.push(), le transizioni lente del navigatore rendono l'app non disponibile.come utilizzare InteractionManager.runAfterInteractions velocizza le transizioni del navigatore

enter image description here

poi mi accorgo here fornisco InteractionManager.runAfterInteractions api per risolvere questo problema,

ho bisogno di portare la maggior parte delle componenti che hanno consumato molto tempo per callback dopo l'animazione navigatore finita, ma io non so dove dovrebbe io lo chiamo,

forse un semplice esempio è sufficiente,

grazie per il vostro tempo.

risposta

12

Ecco un esempio completo di ciò che un performante Navigator scena potrebbe essere simile:

import {Component} from 'react'; 
import {InteractionManager, Text} from 'react-native'; 

class OptimizedScene extends Component { 

    state = {interactionsComplete: false}; 

    componentDidMount() { 
    InteractionManager.runAfterInteractions(() => { 
     this.setState({interactionsComplete: true}); 
    }); 
    } 

    render() { 
    if (!this.state.interactionsComplete) { 
     return <Text>loading...</Text>; 
    } 

    return (
     <ExpensiveComponent/> 
    ); 
    } 
} 

Questo è stato estratto in a library per rendere ancora più facile :

import {AfterInteractions} from 'react-native-interactions'; 

function MyScene() { 
    return (
    <AfterInteractions placeholder={<CheapPlaceholder/>}> 
     <ExpensiveComponent/> 
    </AfterInteractions> 
); 
} 
+0

grazie per la tua risposta :) –

0

È necessario passare qualsiasi codice che mantiene occupato il thread JS per InteractionManager, ad es.

InteractionManager.runAfterInteractions(() => { 
    someLongTask() // or animations, or whatever 
}) 
Problemi correlati