使用道具控制模式

时间:2019-04-22 06:03:06

标签: react-native

在我的一个屏幕中,我有一个模态来显示一些选项。 这是我在WelcomeScreen.js中的模态:

this.state={
   showLoginOption:false
   }

...

 <Modal visible={this.state.showLoginOption} animationType='slide'>
<Icon name='ios-close' onPress={()=>this.setState({showMe:false})} >
<Modal/>

 <TouchableOpacity onPress={()=>this.setState({showLoginOption:true})} />

它完全可以正常工作,但是为了提高代码的可读性,我想将其转换为组件文件。但是,我真的不知道如何通过道具控制可见属性。

我已经在新组件中尝试过此操作

WelcomeScreen.js

this.state={
  showLoginOption:false
  }

...

<LoginOption showMe={this.state.showLoginOption}/>

...
<TouchableOpacity onPress={()=>this.setState({showLoginOption:true})} />

LoginOption.js

   constructor(props){
       super(props);
       this.state={
           showMe:props.showMe
       }
   }
...
<Modal visible={this.state.showMe} animationType='slide'>
<Icon name='ios-close' onPress={()=>this.setState({showMe:false})} >
<Modal/>

这一次,当我按TouchableOpacity时,什么也没发生。

谢谢您的时间:)

1 个答案:

答案 0 :(得分:0)

//WelcomeScreen.js
this.state={
  showLoginOption:false
  }

 //function for handle modal visibility 
 handleModalVisibility : (action)=> this.setState({showLoginOption : action})

...

<LoginOption showMe={this.state.showLoginOption} modalVisibility={this.handleModalVisibility}/>

...
<TouchableOpacity onPress={this.handleModalVisibility.bind(this,true)} />

 export const LoginOption  = ({showMe,modalVisibility})=> (
 <Modal visible={showMe} animationType='slide'>
 <Icon name='ios-close' onPress={modalVisibility.bind(this,false)} >
 <Modal/>
)