使用按钮和关闭图标关闭 React Semantic UI 模式
Closing React Semantic UI modal with button and close icon
我有一个模态框,用户需要在其中填写一些表格并保存通过模态框中的按钮填写的所有内容。当用户保存时,我希望模式关闭。我可以通过在 Modal
组件上使用 open
道具来完成这项工作。但是如果我这样做,当我尝试通过 closeIcon 这样做时,模态不会关闭。
我该怎么做才能让用户通过这两种方法关闭模态框?
这是我当前的模态代码:
handleCreateButton (evt) {
evt.preventDefault()
// ...
// code to save whatever was typed in the form
// ...
this.setState({showModal: false})
}
renderModalForm () {
const {
something,
showModal
} = this.state
// if I have the open props, I get to close the Modal after the button is clicked
// however, when using the icon or clicking on dimmer it wont work anymore.
return (
<Modal closeIcon closeOnDimmerClick open={showModal} trigger={<Button onClick={() => this.setState({showModal: true})}><Icon className='plus'/>New Challenge</Button>}>
<Modal.Header>My Modal</Modal.Header>
<Modal.Content>
<Form>
<Form.Input
label='Something'
value={something}
onChange={(evt) => this.handleChangeForms('something', evt.target.value)}
/>
<Button onClick={(evt) => this.handleCreateButton(evt)}>Save</Button>
</Form>
</Modal.Content>
</Modal>
)
}
当您使用 open
道具时,您还需要使用 onClose
处理程序道具。
顺便说一下,closeOnDimmerClick
默认设置为 true
。
这是一个 运行 示例:
const { Modal, Form, Button, Icon } = semanticUIReact;
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
something: '',
showModal: false
}
}
handleChangeForms = (e, { value }) => {
this.setState({ something: value });
}
handleCreateButton(evt) {
evt.preventDefault()
this.closeModal();
}
closeModal = () => {
this.setState({ showModal: false })
}
render() {
const {
something,
showModal
} = this.state
return (
<Modal closeIcon onClose={this.closeModal} open={showModal} trigger={<Button onClick={() => this.setState({ showModal: true })}><Icon className='plus' />New Challenge</Button>}>
<Modal.Header>My Modal</Modal.Header>
<Modal.Content>
<Form>
<Form.Input
label='Something'
value={something}
onChange={this.handleChangeForms}
/>
<Button onClick={(evt) => this.handleCreateButton(evt)}>Save</Button>
</Form>
</Modal.Content>
</Modal>
)
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.9/semantic.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/semantic-ui-react@0.77.1/dist/umd/semantic-ui-react.min.js"></script>
<div id="root"></div>
我有一个模态框,用户需要在其中填写一些表格并保存通过模态框中的按钮填写的所有内容。当用户保存时,我希望模式关闭。我可以通过在 Modal
组件上使用 open
道具来完成这项工作。但是如果我这样做,当我尝试通过 closeIcon 这样做时,模态不会关闭。
我该怎么做才能让用户通过这两种方法关闭模态框?
这是我当前的模态代码:
handleCreateButton (evt) {
evt.preventDefault()
// ...
// code to save whatever was typed in the form
// ...
this.setState({showModal: false})
}
renderModalForm () {
const {
something,
showModal
} = this.state
// if I have the open props, I get to close the Modal after the button is clicked
// however, when using the icon or clicking on dimmer it wont work anymore.
return (
<Modal closeIcon closeOnDimmerClick open={showModal} trigger={<Button onClick={() => this.setState({showModal: true})}><Icon className='plus'/>New Challenge</Button>}>
<Modal.Header>My Modal</Modal.Header>
<Modal.Content>
<Form>
<Form.Input
label='Something'
value={something}
onChange={(evt) => this.handleChangeForms('something', evt.target.value)}
/>
<Button onClick={(evt) => this.handleCreateButton(evt)}>Save</Button>
</Form>
</Modal.Content>
</Modal>
)
}
当您使用 open
道具时,您还需要使用 onClose
处理程序道具。
顺便说一下,closeOnDimmerClick
默认设置为 true
。
这是一个 运行 示例:
const { Modal, Form, Button, Icon } = semanticUIReact;
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
something: '',
showModal: false
}
}
handleChangeForms = (e, { value }) => {
this.setState({ something: value });
}
handleCreateButton(evt) {
evt.preventDefault()
this.closeModal();
}
closeModal = () => {
this.setState({ showModal: false })
}
render() {
const {
something,
showModal
} = this.state
return (
<Modal closeIcon onClose={this.closeModal} open={showModal} trigger={<Button onClick={() => this.setState({ showModal: true })}><Icon className='plus' />New Challenge</Button>}>
<Modal.Header>My Modal</Modal.Header>
<Modal.Content>
<Form>
<Form.Input
label='Something'
value={something}
onChange={this.handleChangeForms}
/>
<Button onClick={(evt) => this.handleCreateButton(evt)}>Save</Button>
</Form>
</Modal.Content>
</Modal>
)
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.9/semantic.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/semantic-ui-react@0.77.1/dist/umd/semantic-ui-react.min.js"></script>
<div id="root"></div>