如何在另一个 React 组件中关闭语义 ui 模态?
How to close semantic ui modal in another react component?
在我的主要组件中,我可以通过单击图标打开模式。模态的内容是一个单独的组件,它正在调用一个方法。
如果方法调用成功,我想关闭模式。但是我该怎么做呢?
主要成分
class Example extends Component {
constructor(props) {
super(props)
this.state = {}
}
render() {
return (
<div>
<Modal trigger={ <Icon name='tags' /> } >
<Modal.Header>
<div>
<Header floated='left'>Title</Header>
<Button floated='right'>A Button</Button>
</div>
</Modal.Header>
<Modal.Content>
<ModalContent />
</Modal.Content>
</Modal>
</div>
)
}
}
模态内容
class ModalContent extends Component {
constructor(props) {
super(props)
this.state = {}
}
handleClick() {
method.call(
{ param },
(error, result) => {
if (result) {
// Now close the modal
}
}
);
}
render() {
return (
<Button onClick={this.handleClick} content='Save' />
)
}
}
将 onSuccess
方法作为 props 传递:
在 parent 中:
<ModalContent onSuccess={this.onModalSuccess}/>
在 child 组件中:
handleClick() {
method.call(
{ param },
(error, result) => {
if (result) {
this.props.onSuccess()
}
}
);
}
通过这种方式,您可以将 open/close 逻辑保留在 parent 组件中。
semantic-ui 有 属性 open
。只需设置 true
或 false
class Example extends Component {
constructor(props) {
super(props)
this.state = {
open: false
}
open = () => this.setState({ open: true })
close = () => this.setState({ open: false })
render() {
return (
<div>
<Modal open={this.state.open} trigger={ <Icon name='tags' /> } >
<Modal.Header>
<div>
<Header floated='left'>Title</Header>
<Button floated='right'>A Button</Button>
</div>
</Modal.Header>
<Modal.Content>
<ModalContent />
</Modal.Content>
</Modal>
</div>
)
}
}
您应该将 onClose
属性 添加到 <Modal>
元素。请参见下面的示例:
<Modal
trigger={<Button onClick={this.handleOpen}>Show Modal</Button>}
open={this.state.modalOpen}
onClose={this.handleClose}
>
然后您可以将 onClose
功能添加到模态按钮中。文档中的完整示例:
https://react.semantic-ui.com/modules/modal#modal-example-controlled
在我的主要组件中,我可以通过单击图标打开模式。模态的内容是一个单独的组件,它正在调用一个方法。 如果方法调用成功,我想关闭模式。但是我该怎么做呢?
主要成分
class Example extends Component {
constructor(props) {
super(props)
this.state = {}
}
render() {
return (
<div>
<Modal trigger={ <Icon name='tags' /> } >
<Modal.Header>
<div>
<Header floated='left'>Title</Header>
<Button floated='right'>A Button</Button>
</div>
</Modal.Header>
<Modal.Content>
<ModalContent />
</Modal.Content>
</Modal>
</div>
)
}
}
模态内容
class ModalContent extends Component {
constructor(props) {
super(props)
this.state = {}
}
handleClick() {
method.call(
{ param },
(error, result) => {
if (result) {
// Now close the modal
}
}
);
}
render() {
return (
<Button onClick={this.handleClick} content='Save' />
)
}
}
将 onSuccess
方法作为 props 传递:
在 parent 中:
<ModalContent onSuccess={this.onModalSuccess}/>
在 child 组件中:
handleClick() {
method.call(
{ param },
(error, result) => {
if (result) {
this.props.onSuccess()
}
}
);
}
通过这种方式,您可以将 open/close 逻辑保留在 parent 组件中。
semantic-ui 有 属性 open
。只需设置 true
或 false
class Example extends Component {
constructor(props) {
super(props)
this.state = {
open: false
}
open = () => this.setState({ open: true })
close = () => this.setState({ open: false })
render() {
return (
<div>
<Modal open={this.state.open} trigger={ <Icon name='tags' /> } >
<Modal.Header>
<div>
<Header floated='left'>Title</Header>
<Button floated='right'>A Button</Button>
</div>
</Modal.Header>
<Modal.Content>
<ModalContent />
</Modal.Content>
</Modal>
</div>
)
}
}
您应该将 onClose
属性 添加到 <Modal>
元素。请参见下面的示例:
<Modal
trigger={<Button onClick={this.handleOpen}>Show Modal</Button>}
open={this.state.modalOpen}
onClose={this.handleClose}
>
然后您可以将 onClose
功能添加到模态按钮中。文档中的完整示例:
https://react.semantic-ui.com/modules/modal#modal-example-controlled