模态框在react-redux应用程序中不会打开

时间:2016-12-19 13:48:02

标签: reactjs redux bootstrap-modal react-redux

我正在开发一个React-Redux应用程序,目前正在点击表单上显示一个模态框。但我无法使其发挥作用。我已经尝试了很多东西,但无法弄清楚为什么模态框不会出现。这是我的代码。

模态组件文件

import React from 'react'
import { connectModal } from 'redux-modal'
import { Button, Modal } from 'react-bootstrap'
import UpdatePasswordForm from 'forms/updatepassword'

export class UpdatePassword extends React.Component {
  constructor(props) {
    super(props)
  }

  renderCloseIcon (handleHide) {
    return (
      <button className='close' onClick={ handleHide }>
            <span>
            <i className="modal__close"/>
          </span>
      </button>
    )
  }

  renderModalLogo () {
    return (
      <div className="modal__header modal__header_login">
        <div className="modal__logo"></div>
      </div>
    )
  }

  render() {
    const { show, handleHide } = this.props

    return (
      <Modal
        show={ show }
        onHide={ handleHide }
        backdrop={ true }
        className="modal_dark modal_center"
        dialogClassName="modal-background-fix">
        <div className="modal__container">
          { this.renderCloseIcon(handleHide) }
          { this.renderModalLogo() }
          <div className="modal__content">
            <UpdatePasswordForm onSubmit={() => {}}/>
          </div>
        </div>
      </Modal>
    )
  }
}

export default connectModal({name: 'updatepassword'})(UpdatePassword)

模态中加载的表单

import React from 'react'
import { Field, reduxForm } from 'redux-form'
import Text from '../containers/Text'

const I18n = {}
I18n.t = Text.t

const UpdatePasswordForm = (props) => {
  const { handleSubmit, pristine, reset, submitting } = props
  return (
    <form onSubmit={handleSubmit}>
      <fieldset className="form-group">
        <Field name="current_password" component="input"
               type="password" placeholder="Password" className="form-control" />
      </fieldset>

      <fieldset className="form-group">
        <Field name="password" component="input"
               type="password" placeholder="New Password" className="form-control" />
      </fieldset>

      <fieldset className="form-group">
        <Field name="password_confirm" component="input" type="password"
               placeholder="New password confirmation" className="form-control" />
      </fieldset>

      <fieldset className="form-group form-group_btns">
        <button type="submit" disabled={pristine || submitting} className="btn btn-primary btn-block">
          { 'CHANGE PASSWORD' }
        </button>
      </fieldset>
    </form>
  )
}

export default reduxForm({
  form: 'updatepassword'  // a unique identifier for this form
})(UpdatePasswordForm)

调用模式的文件

import React from 'react';
import './EditInformation.scss'
import { show } from 'redux-modal'
import UpdatePassword from './Modals/UpdatePassword'

// TODO fix stylee stylee
// TODO onChange is not updating correctly, FIX!

const EditInformation = ({ onSubmit, onChange, user, formSubmitting }) => {
  return (
    <div>
      <UpdatePassword />

      <form className='form-line form-line_light'>
        <div className='col-xs-16 col-sm-8'>
              <fieldset className='form-group'>
                <button
                  onClick={(e) => {
                    show('updatepassword')
                    e.preventDefault()                        
                  }}
                  className='btn btn-secondary btn-lg profile-edit__addcard'
                  style={ { position: 'relative', top: '-27px' } }>
                  <i className='fa fa-plus'/>Vaihda salasana
                </button>
              </fieldset>
        </div>
      </form>
   </div>
  );
};

export default EditInformation;

2 个答案:

答案 0 :(得分:0)

在我们的项目开始时,我尝试使用所有自定义功能开发自己的模态。发生了许多问题。我搜索了一些开源项目,然后在github上找到了一个项目。你应该使用react-modal,它易于使用和精心设计。

react-modal

答案 1 :(得分:0)

我现在已经想到了一个愚蠢的错误。但是我应该得到一个我没有得到的错误。我不得不将'show'传递给我现在已经完成的const EditInformation,它工作得很好。这是代码的一部分:

const EditInformation = ({ onSubmit, onChange, user, formSubmitting, show }) => { 

我以前没有通过'show'。