Родительский компонент будет решать, открыт модал или нет, поэтому ему принадлежит состояние дочернего элемента.
Основываясь на том, что написал @jsdeveloper, я думаю, что вы можете избавиться от беспорядка, используя ту же функцию для управления открытием и закрытием модала.
Мы будем использовать функцию toggleModal
, которая изменяет значение isModalOpen
на true
, когда оно false
, и наоборот. Он использует обратный вызов, который принимает предыдущее значение состояния isModalOpen
.
toggleModal = () => {
this.setState(prevState => ({
isModalOpen: !prevState.isModalOpen
}))
}
Итак, окончательный файл должен выглядеть примерно так.
import React, { Component } from 'react';
import AddModal from './addmodal';
class Page extends Component {
constructor() {
super();
this.state = {
isModalOpen: false
};
}
// ... //skip
toggleModal = () => {
this.setState((prevState) => ({
isModalOpen: !prevState.isModalOpen
}));
};
render() {
return (
<div>
<button onClick={this.handleAdd}> Add </button>{' '}
<AddModal
isOpen={this.state.isModalOpen}
toggleModal={this.toggleModal}
/>
</div>
);
}
}
import React, { Component } from 'react';
class AddModal extends Component {
// ... skip
render() {
return (
<modal inOpen={this.props.isOpen}>
<Button onClick={this.props.toggleModal}>Close</Button>
//... skip
</modal>
);
}
}
export default AddModal;