React原生:如何在平面列表组件中相对于其父元素定位模态

xwbd5t1u  于 2023-01-09  发布在  React
关注(0)|答案(1)|浏览(133)

我有一个基本模态,当按下时,我想在Flatlist组件的rendered项的位置渲染它:

<FlatList style={{ height: "100%" }} data={allNotes} numColumns={1} renderItem= {renderNote}></FlatList>
const renderNote = ({ item }) => (
    <TouchableOpacity
      style={styles.itemStyle}
      onPress={() => setModalVisible(!modalVisible)}
    >
      <Modal
        animationType="fade"
        transparent={true}
        visible={modalVisible}
        onRequestClose={() => {
          Alert.alert("Modal has been closed.");
          setModalVisible(!modalVisible);
        }}
      >
        <View style={styles.relativeView}>
          <View style={styles.modalView}>
            <Text style={styles.modalText}>Hello World!</Text>
            <Pressable
              style={[styles.button, styles.buttonClose]}
              onPress={() => setModalVisible(!modalVisible)}
            >
              <Text style={styles.textStyle}>Hide Modal</Text>
            </Pressable>
          </View>
        </View>
      </Modal>
      <Text numberOfLines={1} style={styles.itemText}>
        {item.text}
      </Text>
    </TouchableOpacity>
  );

当我在模态或模态的子元素上设置绝对位置时,模态总是显示在屏幕的顶部,而不是相对于父元素。

const styles = StyleSheet.create({
 relativeView: {
    position: "absolute",
    marginLeft: 20,
    justifyContent: "center",
    alignItems: "center",
  },
})
zaq34kh6

zaq34kh61#

与其他UI元素如View、Text或Image不同,Modal不使用与其他组件相同的组件父树,这就是为什么它们呈现在其他视图之上的原因。
Modal通过portal移植到自己的主机树。
为此,不建议为列表中呈现的每个元素重新创建模态。

相关问题