javascript - 从 React bootstrap 中的另一个组件打开模式

标签 javascript reactjs react-native

我正在尝试从另一个组件打开模式。这是在我的父组件中:

import { Button, Modal } from 'react-bootstrap';
import React, { useState } from 'react';
import './App.css';
import ModalB from './ModalB';

function App() {
  const [showA, setShowA] = useState(false);
  const [showB, setShowB] = useState(false);

  const handleCloseA = () => setShowA(false);
  const handleShowA = () => setShowA(true);

  const handleShowB = ({ handleShow }) => {
    setShowB(handleShow);
  };


  return (
    <div className="App">
      <header className="App-header">

        <Button variant="primary" onClick={handleShowA}>Open A</Button>
        <Button variant="primary" onClick={handleShowB}>Open B</Button>

        <Modal show={showA} onHide={handleCloseA}>
          <Modal.Header closeButton>
            <Modal.Title>In Modal A</Modal.Title>
          </Modal.Header>
        </Modal>

        <ModalB isModalVisible={showB}></ModalB>

      </header>
    </div>
  );
}

export default App;

模态 B 组件:

import { Button, Modal } from 'react-bootstrap';
import React, { useState } from 'react';
import { propTypes } from 'react-bootstrap/esm/Image';

const ModalB = (props) => {
    const [showB, setShowB] = useState(false);
    const handleCloseB = () => setShowB(false);
    const handleShowB = () => setShowB(true);

    return (
        <div>
            <Modal show={props.isModalVisible} onHide={handleCloseB}>
                <Modal.Header closeButton>
                    <Modal.Title>In Modal B</Modal.Title>
                </Modal.Header>
            </Modal>
        </div>
    );

}

export default ModalB;

问题是从主组件中显示 B。虽然显示 modalA 很简单,但我不明白如何告诉 B 从主组件中显示。

感谢您的帮助。

最佳答案

ModalB 中删除“show”状态,并从父级传入 handleShowB 处理程序。

const ModalB = ({ isModalVisible, handleShowB }) => {
  return (
    <div>
      <Modal show={props.isModalVisible} onHide={handleShowB}>
        <Modal.Header closeButton>
          <Modal.Title>In Modal B</Modal.Title>
        </Modal.Header>
      </Modal>
    </div>
  );
}

在父传递 handleShowB 处理程序中。这里我们只是传递一个匿名回调来调用 setShowB 状态更新器并将 showB 状态更新为 false。

<ModalB
  isModalVisible={showB}
  handleShowB={() => setShowB(false)}
/>

关于javascript - 从 React bootstrap 中的另一个组件打开模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68325687/

相关文章:

javascript - 如何在 svg 路径上覆盖 Html 元素

javascript - 单击下拉列表中的复选框时如何添加输入字段

javascript - AngularJS 和 JSON 数组

reactjs - Heroku "content not from webpack is served from/app/public"尽管使用了所有默认的create-react-app配置

css - 如何使用一个小的 png 作为覆盖在 native react 上来填充屏幕

javascript - 测试函数抛出 UnhandledPromiseRejectionWarning。导致测试不通过

reactjs - React-google-maps:打开多个信息窗口

javascript - React useState 钩子(Hook),用函数调用 setState

react-native - 无法访问 CameraRoll - 未定义不是对象(评估 RCTCameraRollManager.getPhotos)

javascript - 套接字不适用于使用 ws 的 React native 和 Node.js 服务器