如何触发 React Bootstrap 的模式

发布日期:2026-07-15 10:58:04   来源 : 杭州电子商务研究院    浏览量 :2
杭州电子商务研究院 发布日期:2026-07-15 10:58:04  
2

介绍

React Bootstrap 是流行的 Bootstrap CSS 框架的纯 React 实现。react-bootstrap 库在底层不使用 jQuery,因为直接操作 DOM 被视为 React 生态系统中的反模式。因此,触发或关闭模式的 jQuery 方法不起作用。由于 React Bootstrap Modal 是一个 React 组件,因此您可以灵活地使用状态或钩子来控制组件的行为。

在本指南中,您将学习如何使用状态以编程方式触发 React Bootstrap Modal。

设置模态组件

第一步是react-bootstrap库导入Modal组件。同时导入按钮组件,该组件将在点击时触发模式。

      import { Modal, Button } from "react-bootstrap";
    

导入组件后,为模式编写静态标记。

      class App extends Component {
  render() {
    return (
      <Modal>
        <Modal.Header closeButton>
          <Modal.Title>Modal heading</Modal.Title>
        </Modal.Header>
        <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
        <Modal.Footer>
          <Button variant="secondary">Close</Button>
        </Modal.Footer>
      </Modal>
    );
  }
}

export default App;
    

添加状态和方法

接下来,定义状态以及关闭和打开模式的方法。

      class App extends Component {
  state = {
    isOpen: false
  };

  openModal = () => this.setState({ isOpen: true });
  closeModal = () => this.setState({ isOpen: false });

  render() {
    //...
  }
}
    

在渲染块中添加一个按钮来触发模式。

      class App extends Component {
  // ...
  render() {
    <>
      <div
        className="d-flex align-items-center justify-content-center"
        style={{ height: "100vh" }}
      >
        <Button variant="primary" onClick={this.openModal}>
          Launch demo modal
        </Button>
      </div>
      <Modal>{/* ... */}</Modal>
    </>;
  }
}
    

单击按钮时,isOpen状态将设置为 true。现在,要显示模态框,您需要做的就是将isOpen状态值传递给<Modal />组件的show属性。

      <Modal show={this.state.isOpen}>{/* ... */}</Modal>
    

如果您此时查看结果,您会注意到模态框打开得很好,但没有办法关闭它。因此,当用户点击模态框内的“关闭”按钮时,将isOpen状态设置为 false。 <Modal />组件还有一个onHide属性,当用户点击覆盖层或按下Esc按钮时,它会关闭模态框。

      <Modal show={this.state.isOpen} onHide={this.closeModal}>
  <Modal.Header closeButton>
    <Modal.Title>Modal heading</Modal.Title>
  </Modal.Header>
  <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
  <Modal.Footer>
    <Button variant="secondary" onClick={this.closeModal}>
      Close
    </Button>
  </Modal.Footer>
</Modal>
    

现在你应该也能关闭模态框了。很简单,对吧?

最终组件

看一下下面的最后一个组件。

      import React, { Component } from "react";
import { Modal, Button } from "react-bootstrap";

class App extends Component {
  state = {
    isOpen: false
  };

  openModal = () => this.setState({ isOpen: true });
  closeModal = () => this.setState({ isOpen: false });

  render() {
    return (
      <>
        <div
          className="d-flex align-items-center justify-content-center"
          style={{ height: "100vh" }}
        >
          <Button variant="primary" onClick={this.openModal}>
            Launch demo modal
          </Button>
        </div>
        <Modal show={this.state.isOpen} onHide={this.closeModal}>
          <Modal.Header closeButton>
            <Modal.Title>Modal heading</Modal.Title>
          </Modal.Header>
          <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
          <Modal.Footer>
            <Button variant="secondary" onClick={this.closeModal}>
              Close
            </Button>
          </Modal.Footer>
        </Modal>
      </>
    );
  }
}

export default App;
    

使用 useState 钩子

您还可以使用useState钩子在功能组件中触发模式

状态和方法可以声明如下。其余部分与类组件相同,但不是this.state.isOpen,而是将showModal状态变量传递给<Modal />组件的show属性。

      const [showModal, setShow] = useState(false);

const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
    

查看下面的完整代码。

      import React, { useState } from "react";
import { Modal, Button } from "react-bootstrap";

function App() {
  const [showModal, setShow] = useState(false);

  const handleClose = () => setShow(false);
  const handleShow = () => setShow(true);

  return (
    <>
      <div
        className="d-flex align-items-center justify-content-center"
        style={{ height: "100vh" }}
      >
        <Button variant="primary" onClick={handleShow}>
          Launch demo modal
        </Button>
      </div>
      <Modal show={showModal} onHide={handleClose}>
        <Modal.Header closeButton>
          <Modal.Title>Modal heading</Modal.Title>
        </Modal.Header>
        <Modal.Body>Woohoo, you're reading this text in a modal!</Modal.Body>
        <Modal.Footer>
          <Button variant="secondary" onClick={handleClose}>
            Close
          </Button>
          <Button variant="primary" onClick={handleClose}>
            Save Changes
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  );
}

export default App;
    

结论

您必须使用受控组件,这些组件使用内部状态来设置值并更改组件的行为。jQuery 等库直接操作 DOM,而 React 组件则使用虚拟 DOM 来修改浏览器上的实际 DOM。使用jQuery更改组件的行为是可能的。不过,这会导致意外结果并使其难以调试。React Bootstrap 以纯 React 实现每个组件,因此您不必担心 Bootstrap 对jQuery的依赖。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据