#java #reactjs #react-native #native
#java #reactjs #react-native #родной
Вопрос:
Я создал индекс класса, который вызывает компонент «TelaAdd» как модальный. Модальное открытие, но я не знаю, как его закрыть. Я пытался использовать setShow, но не работает. В модальном есть значок, который закрывал его раньше, но мне пришлось изменить код, создающий компонент класса, и он перестал работать. Я бы хотел нажать значок «IconVoltar» в модальном и закрыть его.
Index.js
import TelaAdd from ' ./AddHospital/Modal '
class Index extends Component
{
constructor (props) {
super(props)
this.state = {
listaFirebase: [],
showModal: false,
search: ''
}}
openModal(value) {
this.setState({
showModal: value })}
render () {
return (
<Container>
<TouchableOpacity style={styles.addButton}
activeOpacity={0.7}
onPress={() => this.openModal(true)}>
<Icon name="plus" size={20} color='#f2f2f2' />
</TouchableOpacity>
<TelaAdd
show={this.state.showModal}
setShow(that's right?) />
</Container>
Другой файл
Modal.js
export default ({ show, setShow }) => {
const onCancel = () =>
{
setShow(false)
}
return (
<ModalHead transparent={ true } visible = { show }
animationType='slide' >
<ModalArea>
<ModalBody>
<Voltar onPress = { ( => onCancel () } >
<IconVoltar width="30" height="30" fill="#000" />
</Voltar>
</ModalBody>
</ModalArea>
</ModalHead>"
}
Комментарии:
1. Когда вы передаете setShow в компонент TelaAdd, вы пишете setShow={setShow} или просто setShow? Потому что кажется, что вы просто пишете setShow из того, что написано выше
Ответ №1:
Похоже, вам может потребоваться привязка this
к open modal обработчику.
Это можно сделать в конструкторе
constructor (props) {
super(props) ;
this.state = {
listaFirebase: [],
showModal: false,
search: ''
};
this.openModal = this.openModal.bind(this);
}
Или это можно сделать с помощью функции со стрелкой
openModal = (value) => {
this.setState({ showModal: value });
};
Также кажется, что вы неправильно передаете setShow
обратный вызов модальному, похоже, это должен быть openModal
обратный вызов.
render () {
return (
<Container>
<TouchableOpacity style={styles.addButton}
activeOpacity={0.7}
onPress={() => this.openModal(true)}
>
<Icon name="plus" size={20} color='#f2f2f2' />
</TouchableOpacity>
<TelaAdd
show={this.state.showModal}
setShow={this.openModal} // <-- pass this.openModal as setShow
/>
</Container>