在react引导中从另一个组件打开模式

klsxnrf1  于 2021-09-23  发布在  Java
关注(0)|答案(2)|浏览(305)

我试图从另一个组件打开一个模态。这在我的父组件中:

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从主组件显示。
谢谢你的帮助。

0sgqnhkj

0sgqnhkj1#

从中删除“显示”状态 ModalB 并通过 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 声明是错误的。

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

nxowjjhe2#

常量handleshowb=({handleshow})=>{setshowb(handleshow);};
你为什么需要 handleShow 如果这是未定义的?
只要根据当前状态更新状态,其余代码就可以正常工作。

const handleShowB = () => setShowB(!showB);

这将触发当前模式状态(天气隐藏/显示) ModalB 组件,它将相应地渲染。
下面是工作演示:https://codesandbox.io/s/show-multiple-modals-edv6y

相关问题