Reactjs REACT NATIVE-关闭导入模式时更改屏幕状态
当我关闭模式时,我需要检测它是否已关闭以更改父页面的状态。当我改变状态的任何属性时,不能改变它,模态 ExpertFeedback.jsReactjs REACT NATIVE-关闭导入模式时更改屏幕状态,reactjs,modal-dialog,state,native,react-props,Reactjs,Modal Dialog,State,Native,React Props,当我关闭模式时,我需要检测它是否已关闭以更改父页面的状态。当我改变状态的任何属性时,不能改变它,模态 ExpertFeedback.js import ModalExpertFeedback from './ModalExpertFeedback'; export default class ExpertFeedback extends Component { constructor(props) { super(props); this.stat
import ModalExpertFeedback from './ModalExpertFeedback';
export default class ExpertFeedback extends Component {
constructor(props) {
super(props);
this.state = {
modalVisible: false,
projects: [{name:'project0', name:'project1'}],
feedback: {title: '', content: '', project_id: ''}
};
}
proveProjectIsntNull() {
if (this.state.feedback.project_id != null){
this.setModalVisible(true);
} else {
this.setModalVisible(false);
Alert.alert('Select a project please');
}
}
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
render() {
return (
<View>
<View>
<TextInput
placeholder="Write title"
onChangeText={(feedback_title) => this.setState( prevState => ({
feedback: {
...prevState.feedback,
title: feedback_title
}}))
}
value={this.state.feedback.title}
/>
<Picker
selectedValue={this.state.feedback.project_id}
onValueChange={(itemValue, itemIndex) => this.setState( prevState => ({
feedback: {
...prevState.feedback,
project_id: itemValue
}}))
}>
<Picker.Item label="Select a project" value={null} />
{typeof this.state.projects === 'object' && this.state.projects.length && (this.state.projects.map((project, index) => {
return (<Picker.Item label={project.name} value={project.id} />)
}))}
</Picker>
</View>
<ModalExpertFeedback visible={this.state.modalVisible} navigation={this.props.navigation} feedback={this.state.feedback} />
<TouchableOpacity
onPress={() => {
this.proveProjectIsntNull();
}}>
<View>
<Text>SEND NOW</Text>
</View>
</TouchableOpacity>
</View>
)
}
}
从导入ModalExpertFeedback./ModalExpertFeedback';
导出默认类ExpertFeedback扩展组件{
建造师(道具){
超级(道具);
此.state={
modalVisible:错误,
项目:[{name:'project0',name:'project1'}],
反馈:{标题:'',内容:'',项目id:'}
};
}
proveProjectInTull(){
if(this.state.feedback.project_id!=null){
此.setModalVisible(true);
}否则{
此.setModalVisible(false);
Alert.Alert('请选择一个项目');
}
}
setModalVisible(可见){
this.setState({modalVisible:visible});
}
render(){
返回(
this.setState(prevState=>({
反馈:{
…状态反馈,
标题:反馈\标题
}}))
}
值={this.state.feedback.title}
/>
this.setState(prevState=>({
反馈:{
…状态反馈,
项目id:itemValue
}}))
}>
{typeof this.state.projects=='object'&&this.state.projects.length&&this.state.projects.map((项目,索引)=>{
返回()
}))}
{
此.proveProjectInFull();
}}>
立即发送
)
}
}
ModalExpertFeedback.js
export default class ExpertFeedback extends Component {
feedback = {
title: "",
content: "",
project_id: "",
};
state = {
modalVisible: false
};
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
componentWillReceiveProps(props) {
this.setState({ modalVisible: props.visible});
this.setState({ feedback: props.feedback });
}
render() {
return (
<View>
<Modal
animationType="slide"
transparent={true}
visible={this.state.modalVisible}
onRequestClose={() => { console.log('close') }} >
<View>
<TouchableOpacity
onPress={() => {
this.setModalVisible(false);
}}
>
<View>
<Text>Close</Text>
</View>
</TouchableOpacity>
</View>
</Modal>
</View>
)
}
}
<Modal
animationType="slide"
transparent={true}
visible={this.state.modalVisible}
onRequestClose={() => { this.props.handler(someValue) }} >
导出默认类ExpertFeedback扩展组件{
反馈={
标题:“,
内容:“,
项目id:“”,
};
状态={
modalVisible:false
};
setModalVisible(可见){
this.setState({modalVisible:visible});
}
组件将接收道具(道具){
this.setState({modalVisible:props.visible});
this.setState({feedback:props.feedback});
}
render(){
返回(
{console.log('close')}>
{
此.setModalVisible(false);
}}
>
接近
)
}
}
当我在ExpertFeedback中使用TextInput更改feedback.title时,模式将打开如果你想“连接”父对象和子对象,你需要传递一个处理程序,本质上是一个函数作为道具从父对象传递给子对象 示例如下: ExpertFeedback.js 父处理程序(结果){ //请在这里更新 this.setState({result}); } ModalExpertFeedback.js
export default class ExpertFeedback extends Component {
feedback = {
title: "",
content: "",
project_id: "",
};
state = {
modalVisible: false
};
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
componentWillReceiveProps(props) {
this.setState({ modalVisible: props.visible});
this.setState({ feedback: props.feedback });
}
render() {
return (
<View>
<Modal
animationType="slide"
transparent={true}
visible={this.state.modalVisible}
onRequestClose={() => { console.log('close') }} >
<View>
<TouchableOpacity
onPress={() => {
this.setModalVisible(false);
}}
>
<View>
<Text>Close</Text>
</View>
</TouchableOpacity>
</View>
</Modal>
</View>
)
}
}
<Modal
animationType="slide"
transparent={true}
visible={this.state.modalVisible}
onRequestClose={() => { this.props.handler(someValue) }} >
{this.props.handler(someValue)}>