我正在使用「導航器」並通過路由呈現多個組件。我想在渲染到組件之前顯示加載器(如任何圖像或文本「加載...」),因爲這些都需要時間加載。請檢查我的代碼,並建議我在哪裏使用裝載機。 Route.js組件加載時間
import React from 'react';
import {
Platform,
StyleSheet,
Text,
View,
Image,
ListView,
TouchableHighlight,
Navigator,
TouchableOpacity, InteractionManager
} from 'react-native';
import Home from './Home';
import Tomo from './App';
import Profile from './Profile';
var SCREEN_WIDTH = require('Dimensions').get('window').width;
var BaseConfig = Navigator.SceneConfigs.FloatFromRight;
var CustomLeftToRightGesture = Object.assign({}, BaseConfig.gestures.pop, {
snapVelocity: 10,
edgeHitWidth: SCREEN_WIDTH,
});
var CustomSceneConfig = Object.assign({}, BaseConfig, {
springTension: 300,
springFriction: 10,
gestures: {
pop: CustomLeftToRightGesture,
}
});
export default class Route extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {renderPlaceholderOnly: true};
}
componentDidMount() {
InteractionManager.runAfterInteractions(() => {
this.setState({renderPlaceholderOnly: false});
});
}
_configureScene(route) {
return CustomSceneConfig;
}
render() {
if (this.state.renderPlaceholderOnly) {
return this._renderPlaceholderView();
}
return (
<Navigator
initialRoute={{id: 'Home'}}
configureScene={this._configureScene}
renderScene={this.navigatorRenderScene}
/>
);
}
_renderPlaceholderView() {
return (
<View>
<Text>Loading...</Text>
</View>
);
}
header() {
return (
<View>
<Text>Loading...</Text>
</View>
);
}
navigatorRenderScene(route, navigator) {
_navigator = navigator;
switch (route.id) {
case 'Home':
return (<Home navigator={navigator} title="Home"/>);
case 'Tomo':
return (<Tomo navigator={navigator} title="Tomo"/>);
case 'Profile':
return (<Profile navigator={navigator} title="Profile" />);
}
}
}
在此先感謝。
你是否在加載組件之前做任何網絡操作? – Jickson
不,只是渲染組件。包含更多文件的組件之一,以便花費時間加載。 –
好的。您發佈的代碼沒有問題。您可以發佈在從源組件到目標組件導航時引起延遲的組件代碼。 – Jickson