child 组件 React Native 中的关闭模式
Closing modal in child component React Native
我有两个 React Native 组件,我无法从我的 child 组件关闭模态。
ListTrips - Parent
ModalAddTrip - Child
ListTrips.js
import ModalAddTrip from './ModalAddTrip';
....
....
this.state = {
isModalAddTripVisible: false
}
....
handleDismissModalAddTrip = () => {
this.setState({ isModalAddTripVisible: false });
};
closeModal() {
this.refs.ModalAdd.handleDismissModalAddTrip();
}
....
<ModalAddTrip
ref="ModalAdd"
isVisible={this.state.isModalAddTripVisible}
onBackDropPress={this.handleDismissModalAddTrip}
closeModal={() => this.closeModal()}
onRequestClose={this.handleDismissModalAddTrip}
/>
ModalAddTrip.js
<Modal
isVisible={isVisible}
onBackdropPress={onBackDropPress}
closeModal={this.props.child}
>
<Button
style={{ fontSize: 18, color: 'white' }}
containerStyle={{
padding: 8,
marginLeft: 70,
}}
onPress={this.closeModal}
>
打开模式后无法关闭它。我知道它与 referencing/props 有关,但我已经弄乱了它几个小时,但我无处可去。我尝试了一些类似 this.props.closeModal;
的方法,同时将 ref 切换到 child 组件,但它也没有用。在 ModalAddTrip 的一个函数中,但这也不起作用。
非常感谢任何帮助。
谢谢
ModalAddTrip.js
_toggleModal = () =>
this.setState({ isVisible: !this.state.isVisible });
....
render() {
....
<Modal
isVisible={isVisible}
onBackdropPress={onBackDropPress}
>
<Button
style={{ fontSize: 18, color: 'white' }}
containerStyle={{
padding: 8,
marginLeft: 70,
}}
onPress={this._toggleModal} >
</Modal>
这是我用来处理模态的解决方案。
export default class MyModal extends React.Component<Props, State>{
constructor(props: Props){
super(props);
this.state = {
visible: false,
}
}
// Use this method to toggle the modal !
toggleModal = () => {
this.setState({visible: !this.state.visible});
}
render(){
return(
<Modal
isVisible={this.state.visible}
hideModalContentWhileAnimating
onBackdropPress={() => {
this.toggleModal();
}}
useNativeDriver
>
<View style={{backgroundColor: "white", padding: 5}}>
</View>
</Modal>
);
}
}
如果我在它后面按下,模态框将关闭 -> 它可以自行关闭。
现在要从父组件管理它,只需从您的模式中获取一个引用即可:
<MyModal
ref={ref => {
this.myModal = ref;
}}
/>
并且您可以从父组件切换它:
toggleMyModal = () => {
if(this.myModal){
this.myModal.toggleModal();
}
}
如果你成功了请告诉我:)
//对我来说效果很好//
模态EXAMPLE.JS
...
import Child from "./components/Child.js"
const ModalExample = () => {
const [modalVisible, setModalVisible] = useState(true)
return(
<Modal visible={ModalVisible}>
<Child closeModal={()=>setModalVisible(false)}/>
</Modal>
)
}
export default ModalExample
CHILD.JS
...
const Child = (closeModal) => {
render(
<Button title="close" onPress={closeModal.closeModal}/>
)
}
export default Child
我有两个 React Native 组件,我无法从我的 child 组件关闭模态。
ListTrips - Parent
ModalAddTrip - Child
ListTrips.js
import ModalAddTrip from './ModalAddTrip';
....
....
this.state = {
isModalAddTripVisible: false
}
....
handleDismissModalAddTrip = () => {
this.setState({ isModalAddTripVisible: false });
};
closeModal() {
this.refs.ModalAdd.handleDismissModalAddTrip();
}
....
<ModalAddTrip
ref="ModalAdd"
isVisible={this.state.isModalAddTripVisible}
onBackDropPress={this.handleDismissModalAddTrip}
closeModal={() => this.closeModal()}
onRequestClose={this.handleDismissModalAddTrip}
/>
ModalAddTrip.js
<Modal
isVisible={isVisible}
onBackdropPress={onBackDropPress}
closeModal={this.props.child}
>
<Button
style={{ fontSize: 18, color: 'white' }}
containerStyle={{
padding: 8,
marginLeft: 70,
}}
onPress={this.closeModal}
>
打开模式后无法关闭它。我知道它与 referencing/props 有关,但我已经弄乱了它几个小时,但我无处可去。我尝试了一些类似 this.props.closeModal;
的方法,同时将 ref 切换到 child 组件,但它也没有用。在 ModalAddTrip 的一个函数中,但这也不起作用。
非常感谢任何帮助。 谢谢
ModalAddTrip.js
_toggleModal = () =>
this.setState({ isVisible: !this.state.isVisible });
....
render() {
....
<Modal
isVisible={isVisible}
onBackdropPress={onBackDropPress}
>
<Button
style={{ fontSize: 18, color: 'white' }}
containerStyle={{
padding: 8,
marginLeft: 70,
}}
onPress={this._toggleModal} >
</Modal>
这是我用来处理模态的解决方案。
export default class MyModal extends React.Component<Props, State>{
constructor(props: Props){
super(props);
this.state = {
visible: false,
}
}
// Use this method to toggle the modal !
toggleModal = () => {
this.setState({visible: !this.state.visible});
}
render(){
return(
<Modal
isVisible={this.state.visible}
hideModalContentWhileAnimating
onBackdropPress={() => {
this.toggleModal();
}}
useNativeDriver
>
<View style={{backgroundColor: "white", padding: 5}}>
</View>
</Modal>
);
}
}
如果我在它后面按下,模态框将关闭 -> 它可以自行关闭。
现在要从父组件管理它,只需从您的模式中获取一个引用即可:
<MyModal
ref={ref => {
this.myModal = ref;
}}
/>
并且您可以从父组件切换它:
toggleMyModal = () => {
if(this.myModal){
this.myModal.toggleModal();
}
}
如果你成功了请告诉我:)
//对我来说效果很好//
模态EXAMPLE.JS
...
import Child from "./components/Child.js"
const ModalExample = () => {
const [modalVisible, setModalVisible] = useState(true)
return(
<Modal visible={ModalVisible}>
<Child closeModal={()=>setModalVisible(false)}/>
</Modal>
)
}
export default ModalExample
CHILD.JS
...
const Child = (closeModal) => {
render(
<Button title="close" onPress={closeModal.closeModal}/>
)
}
export default Child