Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs REACT NATIVE-关闭导入模式时更改屏幕状态_Reactjs_Modal Dialog_State_Native_React Props - Fatal编程技术网

Reactjs REACT NATIVE-关闭导入模式时更改屏幕状态

Reactjs 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

当我关闭模式时,我需要检测它是否已关闭以更改父页面的状态。当我改变状态的任何属性时,不能改变它,模态

ExpertFeedback.js

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)}>