どの画面からでもアクセスできるカスタムコンポーネントを作成するための最良の方法は何ですか?React Native:すべてのアプリ画面からアクセスできるカスタムコンポーネント
カスタムアラートについて考えてみましょうcomponent
私は私のアプリのすべての画面でそれが必要なので、エラーが発生したときに私はそれを表示することができます。
は現在、私はそれをこのようにやっている:
// AlertModal.js
import ... from ...;
const AlertModal = (props) => {
const {isSuccess, headerText, bodyText, onClosed, isOpen, onBtnPress} = props;
return (
<Modal
...
isOpen={isOpen}
onClosed={() => onClosed()}
>
<View ...>
<Text>{headerText}</Text>
<Text>{bodyText}</Text>
<Button
...
onPress={() => onBtnPress()}
>
...
</Button>
</View>
</Modal>
)
};
export default AlertModal;
//Foo.js
import ...from ...;
const Foo = (props) => {
const { alertIsSuccess, alertHeaderText, alertBodyText, alertIsOpen, alertOnClosed, alertOnBtnPress, onBtnPress, ...rest } = props;
return (
<View style={}>
...
<View style={}>
...
</View>
<Button
onPress={() => onBtnPress()}
/>
<AlertModal
isSuccess={alertIsSuccess}
headerText={alertHeaderText}
bodyText={alertBodyText}
isOpen={alertIsOpen}
onClosed={alertOnClosed}
onBtnPress={alertOnBtnPress}
/>
</View>
)
};
export default QrCodeReader;
//FooContainer.js
import ... from ...;
class FooContainer extends Component {
constructor(props) {
super(props);
this.state = {
bar: false,
baz: true,
bac: '',
bax: false,
bav: '',
// Alert
alertIsOpen: false,
alertIsSuccess: false,
alertHeaderText: '',
alertBodyText: '',
alertOnClosed() {},
alertOnBtnPress() {},
};
this.onBtnPress = this.onBtnPress.bind(this);
}
alert(isSuccess, headerText, bodyText, onBtnPress, onClosed) {
const self = this;
this.setState({
alertIsOpen: true,
alertIsSuccess: isSuccess,
alertHeaderText: headerText,
alertBodyText: bodyText,
alertOnBtnPress: onBtnPress || function() { self.alertClose() },
alertOnClosed: onClosed || function() {},
});
}
alertClose() {
this.setState({
alertIsOpen: false,
});
}
onBtnPress() {
this.alert(
true,
'header text',
'body text',
)
}
render() {
return (
<Foo
onBtnPress={this.onBtnPress}
{...this.state}
/>
);
}
}
export default FooContainer;
ご覧のとおり、これは痛みです(私は間違った方法と思います)。このようにすると、AlertModal
コンポーネントを私のアプリケーションのすべてのcomponent
に含める必要があります。ここでは、警告を表示して新しいプロンプトを表示し、新しい不要な<AlertModal />
コンポーネントを作成する必要があります。
正しい方法は何ですか?
p.s.私はreact-native-router-flux
を私のアプリのルータとして使用しています。 p.s.s.私はMeteor.js + Cordova
からReact-native
に来ています。そこでは、ただ一つのモーダルを作り、それをメインのlayout
に入れて、必要なときにその中に適切な動的テキストを表示/非表示します。
//Main.js
class Main extends Component {
render() {
return (
<Router backAndroidHandler={() => true}>
<Scene key="root">
<Scene key="login" type='reset' component={SignInContainer} initial={true} hideNavBar={true}/>
<Scene key="qrCode" type='reset' component={FooContainer} hideNavBar={true} />
</Scene>
</Router>
);
}
}
どのように画面間を移動しますか?あなたのルート画面にコンポーネントをロードし、モーダルをロードする他の画面への参照を渡すことができるはずです – FuzzyTree
@FuzzyTreeこんにちは、私のナビゲーションを表示するために私の答えを更新しました。 「ルート画面にコンポーネントをロードして、モーダルをロードする他の画面への参照を渡すことができるはずです。 – Edgar