reactjs - react js : Open same modal from different components

标签 reactjs redux bootstrap-modal

我想从我的 React 应用程序中的不同组件打开一个模态,例如“用户登录模态”。例如:我希望从 A.jsB.jsC.js 打开模式。因此,我创建了一个新组件 ModalWindow.js,其中包含模式,并将其导入到 A.jsB.js 中C.js.

现在的问题是我必须在所有 3 个组件中维护状态 showModal: false 以便 Modal 显示/隐藏。无论如何,我必须保持单一状态吗?

一种方法是在父组件中维护状态。但还有更好的办法吗?

X.js

import A from 'A.js'
import B from 'B.js'
import C from 'C.js'

class X extends Component {
  return(
    render{
      <div>
        <A />
        <B />
        <C />
      </div>
    }
  )
}

export default X

A.js

import ModalWindow from 'ModalWindow.js'

class A extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default A

B.js

import ModalWindow from 'ModalWindow.js'

class B extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default B

C.js

import ModalWindow from 'ModalWindow.js'

class C extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default C

ModalWindow.js

import Modal from 'Bootstrap/Modal'

class ModalWindow extends Component {
  return(
    render{
      <Modal
      show={this.props.showModal}
      container={this.props.container}
      bsSize='small'
    >
      <Modal.Header closeButton="true">
        <Modal.Title id="contained-modal-title">
          Login
        </Modal.Title>
      </Modal.Header>
      <Modal.Body>
        Login Here
      </Modal.Body>
    </Modal>
    }
  )
}

export default ModalWindow

最佳答案

我强烈推荐 Dan Abramov 在 How can I display a modal dialog in Redux that performs asynchronous actions? 中描述的方法。基本上,有一个中心组件负责显示模态,并调度操作,给出要打开的模态的名称以及作为 props 传递的任何值。

关于reactjs - react js : Open same modal from different components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748007/

相关文章:

javascript - 类型 'data' 上不存在属性 'AxiosResponse<any> | undefined'

javascript - 如何将 dispatch 传递到 prop 之类的组件中?

javascript - 动态模态 Bootstrap

javascript - 当直接传递给 connect 时, Action 创建者不能作为 props 中的函数使用

javascript - 如何在模态淡入淡出中隐藏元素

javascript - 在复选框检查更改上显示引导对话框

javascript - 样式组件和 Webpack 5 联合模块之间的冲突(无效的钩子(Hook)调用)

JavaScript React 事件被奇怪地触发

javascript - 使用react中的map函数迭代json文件

javascript - 如何在不改变的情况下更新对象数组的嵌套数组的状态