Я испытываю отставание во время переходной анимации, когда Navigator переходит под сцену ShiftEdit. Анимация начинается сразу, но она останавливается на миллисекунду. InteractionManager используется для отсрочки рендеринга четырех компонентов сборщика. Каждый компонент сборщика имеет список элементов, построенных из массива. Есть много предметов. Возможно ли, что это вычисляется, даже если компонент выбора еще не отображается в ShiftEdit, и это является причиной задержки? Не могли бы вы мне помочь, пожалуйста?Реагировать на задержку Android во время анимации
'use strict'
import React, {View, Text, StyleSheet, InteractionManager, TouchableOpacity} from 'react-native';
import { connect } from 'react-redux';
import Spinner from 'react-native-spinkit';
import StyleCommon from '../styles';
import TimePicker from '../components/time-picker';
import ColorPicker from '../components/color-picker';
import LabelPicker from '../components/label-picker';
class ShiftEdit extends React.Component {
constructor(props) {
super(props);
this.state = {
isReady: false,
shiftId: '',
startHour: '',
endHour: '',
color: '',
}
}
componentDidMount() {
InteractionManager.runAfterInteractions(() => {
this.setState({isReady: true});
});
}
onChangeItem = (label, val) => {
let data = {};
data[label] = val;
this.setState(data);
}
renderPlaceholder() {
return (
<View style={styles.container}>
<Text>Loading...</Text>
</View>
)
}
render() {
if (!this.state.isReady) {
return this.renderPlaceholder();
}
return (
<View style={{flex:1, flexDirection: 'column'}}>
<TimePicker label={'Start hour'} value={this.state.startHour} onChange={this.onChangeItem.bind(this, 'startHour')} />
<TimePicker label={'End hour'} value={this.state.endHour} onChange={this.onChangeItem.bind(this, 'endHour')} />
<ColorPicker label={'Color'} value={this.state.color} onChange={this.onChangeItem.bind(this, 'color')} />
<LabelPicker label={'Shift ID'} value={this.state.shiftId} onChange={this.onChangeItem.bind(this, 'shiftId')} />
</View>
)
}
};
Я пытался контролировать регистрацию анимации, как предложил Крис, но это все тот же:
onPress =() => {
let handle = InteractionManager.createInteractionHandle();
this.props.navigator.push({component: 'shiftedit'});
InteractionManager.clearInteractionHandle(handle);
}
Вместо использования InteractionManager в ShiftEdit, вы можете попробовать использовать InteractionManager.runAfterInteractions внутри компонента DidMount каждого компонента-подборщика? Дайте мне знать, если это поможет! – narayanan
Привет, я уже проверил его, но он работает так же, я использую RN 0.22, возможно, это так. –