メインコンポーネントでは、アイコンをクリックしてモーダルを開くことができます。モーダルのコンテンツは、メソッドを呼び出す別個のコンポーネントです。メソッド呼び出しが成功した場合、モーダルを閉じたいと思います。しかし、どうすればこれを行うことができますか?
主成分
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' />
)
}
}
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-controled
セマンティック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>
)
}
}
onSuccess
メソッドを小道具として渡します:
親で:
<ModalContent onSuccess={this.onModalSuccess}/>
子コンポーネント内:
handleClick() {
method.call(
{ param },
(error, result) => {
if (result) {
this.props.onSuccess()
}
}
);
}
このようにして、親コンポーネントでオープン/クローズロジックを保持します。