【问题标题】:Open a modal popUp in React在 React 中打开一个模态弹出窗口
【发布时间】:2019-04-03 23:51:23
【问题描述】:

我有这个按钮在反应:

<button type="button" className="btn btn-primary" onClick={()=>openPopUp(object)}>
                                            Manage Permissions
</button>

当我点击按钮时,我想打开这个弹出窗口:

PopUp.js:

const PopUp = (props) => {
return (
    <div className="modal fade" tabIndex="-1" role="dialog">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">{props.object.name}</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    {props.object.permissions.map((permission) => {
                        return (
                            <li key={permission.code}>
                                {permission.name}
                                {props.showDeleteButton(permission.id, props.object.name)}
                                <p> </p>
                            </li>
                        )
                    })}
                    <form onSubmit={e => props.addPermission(e, props.object)}>
                        <label>
                            Insert a permission:
                         <input type="text" value={props.object.value} onChange={props.handleChange} />
                        </label>
                        <input type="submit" value="Submit" />
                    </form>
                </div>
            </div>
        </div>
    </div>
)

}

为此,我这样做了,但弹出窗口打不开:

 let openPopUp=(object)=>{
    return   <PopUp object={object} cont={cont} onChange={handleChange} addPermission={addPermission} showDeleteButton={showDeleteButton}/>
}

有任何错误抛出,弹出窗口只是没有打开。

【问题讨论】:

    标签: javascript reactjs bootstrap-modal


    【解决方案1】:

    这是因为openPopUp 是一个onclick 处理程序,它不会返回任何要渲染的内容。要实现您的目标,只需使用初始值为 false 的状态变量,并在 openPopUp 方法中更新该值。使用该布尔值来条件渲染 PopUp 组件。

    像这样:

    constructor() {
      super();
      this.state = {
        openPopUp: false,
        object: null
      }
    }
    
    openPopUp(object) {
      this.setState({
        openPopUp: true,
        object: object
      })
    }
    
    
    render() {
      return (
        <div>
          ....
          {this.state.openPopUp && 
            <PopUp object={this.state.object} cont={cont} onChange={handleChange} addPermission={addPermission} showDeleteButton={showDeleteButton} />}
          ....
        </div>
      )
    }
    

    【讨论】:

    • 我不能有一个状态,因为这不是一个组件,只是一个常数
    • 它将是一个功能组件,使用最新版本的 react 我们可以使用useState 来定义功能组件中的状态。检查react doc 示例。使用它并创建一个布尔值。
    • 没有状态你不能这样做。如果您不想使用类组件,请使用反应钩子
    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2013-05-12
    相关资源
    最近更新 更多