画面を管理するために、 react-navigationと stack-navigator を使用しています。
私が使用しているプラットフォーム:
- アンドロイド
- React ネイティブ: 0.47.1
- React ナビゲーション: 1.0.0-beta.11
- エミュレーターとデバイス
モーダルフォームとして機能する画面がありますが、実際にはフルスクリーンです。「モーダルフォームとして機能する」という部分が重要なのはなぜですか?これは、いくつかのオプションとWITH A TRANSPARENT Background COLORを備えた一種のモーダル メニューであるためです。
これは私が期待するものです:
しかし、私が得ているのはこれです:
ご覧のとおり、2 番目の例では、背景色が完全に置き換えられているか、以前にロードされたコンポーネントがアンマウントされているため、実現したい効果が失われています。 アイデアは、他の画面と同じようにこの画面に移動できるようにすることです。
反応ナビゲーションを使用して達成できない場合、他にどのような方法がありますか?
PureComponent
このコンポーネントはクロスアプリコンポーネントであり、内部に多くのメカニズムとロジックをカプセル化するため、アクション (redux) を実行します。そのため、これを利用するコンポーネントの中継として使用することはできません。少なくとも、このコンポーネントを PureComponent として作成すると、他の多くのコンポーネントで多くのメカニズムとロジックを複製する必要があります。
質問のために、また質問が膨大になるのを避けるために、両方の画面はまったく同じスタイルを持っていますが、プッシュされた方が をStackNavigation
置き換えるbackgroundColor
か、前の画面をアンマウントします。
これは私がこれまでに持っているものです:
//PlaylistSelector.js
render() {
//Just a full size empty screen to check and avoid bugs
//Using red instead of transparent, works
return (
<View style={{ flex: 1, backgroundColor: 'transparent' }}>
</View>
);
}
//Navigator.js
import { StackNavigator } from 'react-navigation';
import Album from './Album'; //This is the screen I expect to keep at the background
import PlaylistSelector from './PlaylistSelector';
const AppNavigator = StackNavigator(
{
...moreScreens,
Album: { screen: Album },
PlaylistSelector: {
screen: PlaylistSelector,
navigationOptions: {
style: { backgroundColor: 'red' } //Does not work, red is just to ilustrate, should be transparent,
cardStyle: { //Does not work,
backgroundColor: 'transparent',
},
bodyStyle: { //Does not work,
backgroundColor: 'transparent',
},
}
}
},
{
initialRouteName: 'Splash',
headerMode: 'none',
cardStyle: { //Does not work
backgroundColor: 'transparent',
},
transitionConfig: (): Object => ({ //Does not work
containerStyle: {
backgroundColor: 'transparent',
},
}),
}
);
export default AppNavigator;