#javascript #react-native
Вопрос:
Я пытаюсь создать собственное приложение react, в котором у меня есть два представления. Один из них находится над видом сзади ( absolute
).
Я использую onStartShouldSetResponder
для обнаружения щелчка за пределами вида спереди, и я хочу скрыть состояние входа в систему. Но жест проходит через вид спереди к виду сзади. Это означает, что щелчок login_component(ниже) также передается в login_container(ниже) и скрывает представление.
Вот мой код,
<View onStartShouldSetResponder={() => true}
onResponderRelease={() => this.setState({ showLogin: false })}
style={styles.login_container}
>
<View onStartShouldSetResponder={() => false}
style={styles.login_component}
>
<Text>Join a room</Text>
</View>
</View>
Вот мой код стиля,
const styles = StyleSheet.create({
login_component: {
justifyContent: "center",
alignItems: "center",
height: 200,
width: 300,
backgroundColor: "#F5FCFF",
margin: "auto",
borderRadius: 15,
},
login_container: {
position: "absolute",
height: "100%",
width: "100%",
backgroundColor: "rgba(0,0,0,0.7)",
justifyContent: "center",
alignItems: "center",
},
});
Есть идеи, как это исправить?
Вот предварительный просмотр того, что я делаю — https://i.imgur.com/KAhFAXX.png
Любое альтернативное решение также приветствуется.
Спасибо
Комментарии:
1. Вы пробовали модифицировать zIndex? Может быть, это более простое решение, если оно сработает.
2. Хорошо, ничего себе, не пробовал, спасибо, вы хотели бы добавить свой ответ ниже? Это поможет и другим тоже.
3. Конечно, я также немного доработал ответ. Рад быть вам полезным!
Ответ №1:
Вы можете попробовать установить высокое свойство CSS «zIndex» для элемента JSX, который вы хотите щелкнуть. Более высокий индекс будет гарантировать, что элемент расположен выше элемента с более низким индексом.
В вашем случае вы хотите, чтобы ваш «логин_компонент» был поверх «логин_контейнера». Таким образом, ваш JSX может быть изменен следующим образом (не протестирован):
<View style={{...styles.login_container, zIndex: 99}}> // Lower zIndex (Below)
<View style={{...styles.login_component, zIndex: 999}}> // Higher zIndex (Above)
<Text>Join a room</Text>
</View>
</View>
Обычно вам не нужно было бы беспокоиться о настройке zIndex самостоятельно, но я предполагаю, что свойство «позиция:» абсолютная «» повлияло на поведение по умолчанию.
Ответ №2:
Наконец я получил решение, которое было просто просто использовать stopPropagation
на login_component
.
Окончательный код,
<View onStartShouldSetResponder={() => true}
onResponderRelease={() => this.setState({ showLogin: false })}
style={styles.login_container}
>
<View onStartShouldSetResponder={(e) => e.stopPropagation()}
style={styles.login_component}
>
<Text>Join a room</Text>
</View>
</View>