cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menutup modal bersarang dalam komponen tersuai lain?

Bagaimana untuk menutup kotak modal yang bersarang dalam komponen tersuai lain? Modal saya berada dalam komponen lain. Saya menghadapi masalah menghantar keadaan kepada komponen induk. Anda boleh melihat komponen ibu bapa dan anak di bawah.

Komponen induk:

const ViewNote = ({route, navigation}) => {
  const [visible, setVisible] = useState(false);

  function visibility(cases) {
    setVisible(cases);
    console.log(cases);
  }

  return (
    <View style={styles.noteContainer}>

        {/* 模态框 */}
        <FancyAlert visible={visible} />
        <View style={styles.deleteContainer}>
          <Pressable android_ripple={{color: '#d9d9d9'}} onPress={() =>  setVisible(true)}>
            <MaterialIcons style={styles.icon} name='delete' size={40}/>
          </Pressable>
        </View>

    </View>
  )
}

export default ViewNote

Subkomponen:

const FancyAlert = ({visible}) => {
  const [showAlert, setShowAlert] = useState(false);

  return (
    <Modal transparent visible={visible}>
      <View style={styles.modalContainer}>
        <View style={styles.dialogContainer}>
          <Text style={[styles.text, {fontSize: 16}]}>您确定要删除此便签吗?</Text>

          <View style={styles.buttonContainer}>
            <Pressable style={styles.cancel} android_ripple={{color: '#d9d9d9'}} onPress={() => setVisible(false)}>
              <Text style={[styles.text, {fontFamily: 'SofiaProBold'}]}>取消</Text>
            </Pressable>
            
          </View>
        </View>
      </View>
    </Modal>
  )
}

export default FancyAlert

P粉579008412P粉579008412472 hari yang lalu573

membalas semua(2)saya akan balas

  • P粉590428357

    P粉5904283572023-09-12 10:49:03

    Alihkan keadaan ke komponen induk dan lulus fungsi onClose.

    const ViewNote = ({route, navigation}) => {
      const [visible, setVisible] = useState(false);
    
      function visibility(cases) {
        setVisible(cases);
        console.log(cases);
      }
    
      return (
        <View style={styles.noteContainer}>
    
            {/* MODAL */}
            <FancyAlert visible={visible} onClose={() => setVisible(false)} />
            <View style={styles.deleteContainer}>
              <Pressable android_ripple={{color: '#d9d9d9'}} onPress={() =>  setVisible(true)}>
                <MaterialIcons style={styles.icon} name='delete' size={40}/>
              </Pressable>
            </View>
    
        </View>
      )
    }
    
    export default ViewNote
    const FancyAlert = ({visible, onClose}) => {
     
      return (
        <Modal transparent visible={visible} onClose={onClose}>
          <View style={styles.modalContainer}>
            <View style={styles.dialogContainer}>
              <Text style={[styles.text, {fontSize: 16}]}>Are you sure you want to delete this note?</Text>
    
              <View style={styles.buttonContainer}>
                <Pressable 
                  style={styles.cancel} 
                  android_ripple={{color: '#d9d9d9'}} 
                  onPress={onClose}>
                <Text style={[styles.text, {fontFamily: 'SofiaProBold'}]}>Cancel</Text>
                </Pressable>
                
              </View>
            </View>
          </View>
        </Modal>
      )
    }
    
    export default FancyAlert

    balas
    0
  • P粉563831052

    P粉5638310522023-09-12 00:45:33

    Anda hanya perlu melepasi fungsi "keterlihatan" sebagai hak milik FancyAlert. Kod anda sepatutnya kelihatan seperti ini:

    const ViewNote = ({route, navigation}) => {
      const [visible, setVisible] = useState(false);
    
      function visibility(cases) {
        setVisible(cases);
        console.log(cases);
      }
    
      return (
        <View style={styles.noteContainer}>
    
            {/* MODAL */}
            <FancyAlert visible={visible} visibility={visibility} />
            <View style={styles.deleteContainer}>
              <Pressable android_ripple={{color: '#d9d9d9'}} onPress={() =>  visibility(true)}>
                <MaterialIcons style={styles.icon} name='delete' size={40}/>
              </Pressable>
            </View>
    
        </View>
      )
    }
    
    export default ViewNote

    Kemudian, komponen FancyAlert hendaklah:

    const FancyAlert = ({ visible, visibility }) => {
      const [showAlert, setShowAlert] = useState(false);
    
      return (
        <Modal transparent visible={visible}>
          <View style={styles.modalContainer}>
            <View style={styles.dialogContainer}>
              <Text style={[styles.text, {fontSize: 16}]}>你确定要删除这个笔记吗?</Text>
    
              <View style={styles.buttonContainer}>
                <Pressable style={styles.cancel} android_ripple={{color: '#d9d9d9'}} onPress={() => visibility(false)}>
                  <Text style={[styles.text, {fontFamily: 'SofiaProBold'}]}>取消</Text>
                </Pressable>
                
              </View>
            </View>
          </View>
        </Modal>
      )
    }
    
    export default FancyAlert

    Itu sahaja

    balas
    0
  • Batalbalas