美文网首页
Ant Modal的封装二

Ant Modal的封装二

作者: TimeMage | 来源:发表于2019-05-26 16:30 被阅读0次

    前言

    上篇实现了一个Ant Model的封装方案,虽然能work,但代码有点丑不够美观。本篇结合了React的高阶组件特性,传入一个Form类即可创建一个Modal类。现在做如下陈述。

    示意图

    解释如下

    1. createModal为一个高阶函数(也称高阶组件),传入一个Form类,获得一个Modal类,接受和返回的对象类似于Java里的Class类
    2. Modal类的创建过程中并没有定义Form,因此它会直接使用createModal里的Form。
    3. 这样传入一个LoginForm,就可获得LoginModal.
    4. LoginModal在实例化时,需要传入props,包括hint(在主页面上的提示)和title(对话框的标题,也称caption)


      示意图

    代码

    只贴出createModal的代码

    const createModal= SubComponent =>class extends React.Component {
                state = {
                    visible: false,
                }
                showModal = (e)=>{
                    this.setState({visible:true})
                }
                handleClose = ()=>{
                    this.setState({visible:false})
                }
                renderAnchor = (hint, anchor)=>{
                    if(anchor=='button') {
                        return <Button type='primary' onClick={this.showModal}>
                            {hint}
                            </Button>
                    } 
                    return <span style={{ color :'blue'}} onClick={this.showModal}>
                        {hint}
                        </span>
                }
                render() {
                    const {hint, title, anchor, ...rest} = this.props
                    return (
                        <span>
                            {this.renderAnchor(hint, anchor)}
                            <Modal title={title} visible={this.state.visible}
                                footer={null}
                                onOk={this.handleClose}
                                onCancel={this.handleClose}>
                                <SubComponent onSubmit={this.handleClose} {...rest}/>
                            </Modal>
                        </span>
                    )
                }
            }
    export default createModal
    

    调用示例

    RegisterForm是需要用Modal包装的组件

    const RegisterComponent=createModal(RegisterForm)
    const RegisterModal = ({hint='注册',title='请注册',anchor='span'})=>{
        return <RegisterComponent hint={hint} title={title} anchor={anchor}/>
    }
    

    相关文章

      网友评论

          本文标题:Ant Modal的封装二

          本文链接:https://www.haomeiwen.com/subject/gfcftctx.html