react-navigation
パッケージのナビゲータを使用し、reduxを実装するとどこかが読み込まれました。ナビゲータールート内のすべてのコンポーネントは、ユーザーがコンポーネント間を移動するとナビゲータルートのすべてのコンポーネントがリロードされます
export const MainScreenTabNavigator = TabNavigator({
Start: {
screen: Start,
navigationOptions: {
title: 'Start',
},
},
},{
tabBarPosition: "bottom",
tabBarOptions: {
activeTintColor: '#222',
labelStyle: {
color: '#ddd',
},
style: { backgroundColor: '#333' },
}
});
export const AppNavigator = StackNavigator({
Main: {
screen: MainScreenTabNavigator, // Nested tab navigator
},
Login: {
screen: Login,
navigationOptions: {
title: 'Aanmelden',
}
},
Camera: {
screen: AppCamera,
navigationOptions: {
title: 'Camera',
}
}
}, {
mode: 'modal',
headerMode: 'none',
});
ログイン画面が最初にユーザーに表示されてログインすることができ(すなわちcomponentWillRecieveProps
)
しかし、私が持っている2つのページを再ロードされます。ユーザーが資格情報を手動で入力できるフォームと、ログイン資格情報でQRコードをスキャンできるカメラに移動するボタンがあります。
どちらの場合も、ユーザーはログインアクションを送出します。 ログインページとカメラページの両方が同じ小道具の変化に耳を傾ける:
componentWillReceiveProps(nextProps) {
if (nextProps.account.loginSuccess) {
this.props.navigation.dispatch(NavigationActions.navigate({ routeName: 'Start' }));
} else {
if (nextProps.account.loginError) {
Toast.showLongBottom(nextProps.loginError);
}
}
this.setState({spinnerVisible: false});
}
アプリが正常に「スタート」に移動しますが、それがない時にログインし、カメラページの両方がcomponentWillReceiveProps
に無限ループを引き起こし、再ロードされています無限に「開始」に何度も何度も行き来します。
これは私のナビゲーション減速です:
function nav(state = initialNavState, action) {
const nextState = AppNavigator.router.getStateForAction(action, state);
// Simply return the original `state` if `nextState` is null or undefined.
return nextState || state;
}
私はこの動作を防ぐために何ができますか?