2016-03-21 8 views
7

Aufgrund komplexer Logik muss ich viele Komponenten rendern, wenn this.props.navigator.push() langsame Navigatorübergänge die App nicht verfügbar machen.wie Sie InteractionManager.runAfterInteractions verwenden Navigatorübergänge schneller machen

enter image description here

dann here liefern Ich bemerke InteractionManager.runAfterInteractions api dieses Problem zu lösen,

ich die meisten Komponenten mitbringen müssen, die lange Zeit, um Rückruf nach Navigator Animation verbraucht fertig, aber ich weiß nicht, wo sollte ich nenne es,

vielleicht ein einfaches Beispiel ist genug,

dank für Ihre Zeit.

Antwort

12

Hier ist ein vollständiges Beispiel von dem, was eine performante Navigator Szene aussehen könnte:

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/> 
    ); 
    } 
} 

Das in a library extrahiert wurde, um es noch einfacher :

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

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

danke für deine antwort :) –

0

Sie sollten jeglichen Code, der den JS-Thread beschäftigt, an den InteractionManager übergeben, z.

InteractionManager.runAfterInteractions(() => { 
    someLongTask() // or animations, or whatever 
}) 
Verwandte Themen