如何使用 React 和 React Bootstrap

发布日期:2026-07-16 02:57:04   来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-16 02:57:04  
0

介绍

React Bootstrap是一个专为 React 构建的开源 UI 库,可帮助您将原生 Bootstrap 组件用作纯 React 组件,例如模态框、弹出框、按钮等。它使用简单,可轻松与现有 React 应用集成以自定义 UI,而不会影响功能。

本指南探讨如何在您的应用程序中使用 React 与 React Bootstrap。

设置 React Bootstrap 应用程序

创建一个新的 React 项目。

      npx create-react-app react-and-react-bootstrap-app
    

安装 react-bootstrap 和 Bootstrap。

      npm install react-bootstrap bootstrap
    

创建一个 react-bootstrap Modal

使用 react-bootstrap 模式作为App.js中的登录表单弹出窗口。首先,从 React 导入useState钩子以在功能组件中使用状态变量。然后从 react-bootstrap 导入ModalButton以及 Bootstrap 的压缩 CSS 以使用 Bootstrap 的样式类。

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

Modal使用show属性来控制其在页面上的打开状态。show 存储一个布尔值指示弹出窗口是应该打开还是关闭。您可以使用挂接到其按钮的事件处理程序来切换显示。查看以下代码以呈现您单击登录按钮时打开的react-bootstrap模式。

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

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

  return (
    <>
      <Button variant="primary" onClick={handleShow}>
        Sign In
      </Button>

      <Modal show={show} onHide={handleClose}>
        <Modal.Header closeButton>
          <Modal.Title>Sign In Form</Modal.Title>
        </Modal.Header>
        <Modal.Body>
         {/*add a react form here*/} 
         </Modal.Body>
        <Modal.Footer>
          <Button variant="secondary" onClick={handleClose}>
            Sign Up
          </Button>
          <Button variant="primary" onClick={handleClose}>
            Sign In
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  );
}

export default App;
    

在模态框内创建一个简单的表单

使用包含两个输入字段的表单填充模式主体:一个用于输入电子邮件地址,另一个用于输入密码。创建一个状态变量以将电子邮件存储在组件的状态中。

      ...
    const [email,setEmail]=useState('');
...
    

您可以使用 Bootstrap 的来管理内容的布局,并将表单字段封闭在form-group类中以获得整洁的视图。将onChange处理程序附加到电子邮件字段,该处理程序捕获字段中输入的值并将其设置为电子邮件状态变量。

      ...  
<Modal.body>
 <Form>
    
    <div className="form-group">

        <div className="row">
            <div className="col-3">
                <label for="email" style={{fontWeight:500}} >Email:</label>                            </div>
           <div className="col-9">
               <input name="email" type="text" placeholder="Enter Email..." 
                        onChange={(e)=>{setEmail(e.target.value)}}                   
                />
           </div>  
        </div>
              
  </div>
  
  <div className="form-group">
      <div className="row">
           <div className="col-3">
              <label for="password" style={{fontWeight:500}}>Password:</label>
           </div>
           <div className="col-9">
              <input name="password" type="password" placeholder="Enter Password..."/>
           </div>
      </div>       
  </div>
    
 </Form>
</Modal.body>
...
    

要验证状态是否已正确设置,请在用户点击登录按钮时将其记录在控制台上。您可以在模态框的handleClose()方法中执行此操作,该方法在模态框关闭时触发,如下所示。

添加 react-bootstrap 警报组件

警报是成功提交表单或出现错误时向用户提供反馈的一种很好的方式。在App.js顶部从 react-bootstrap导入Alert组件。

      import {Alert} from 'react-bootstrap';
    

创建一个单独的功能组件来呈现警报。它返回一个包含标题、内容和关闭按钮的 react-bootstrap 警报。就像模态一样,它使用 show属性来指示警报在当前视图中是保持打开还是关闭。

      function MyAlert() {
  const [show, setShow] = useState(true);

  return (
    <>
      <Alert show={show} variant="success">
        <Alert.Heading>Welcome user :)</Alert.Heading>
        <p>
         you have successfully signed in! 
        </p>
        <hr />
        <div className="d-flex justify-content-end">
          <Button onClick={() => setShow(false)} variant="outline-success">
            Close me ya'll!
          </Button>
        </div>
      </Alert>

      {!show && <Button onClick={() => setShow(true)}>Show Alert</Button>}
    </>
  );
}
    

App.js中渲染MyAlert

      ...
      <MyAlert/>
...
    

默认情况下,由于show的初始值,警报将保持在页面上打开状态

结合所有功能

为了使MyAlert组件与App组件交互,请将电子邮件和另一个状态变量作为 props 传递给前者。此状态变量控制与模式相关的页面上的警报的显示状态。由于警报需要在用户单击登录之前隐藏或关闭,因此将其初始化为 false。

      ...
    const [showAlert,setShowAlert]=useState(false);
...
    

当用户点击模式中的handleClose()内部登录时将其设置为 true 。

      ...
    const handleClose = () =>{
    console.log(email);
     setShow(false);
     setShowAlert(true);
  }
...
    

有条件地渲染MyAlert组件并传入emailshowAlert作为 props。

      ...
    {showAlert && < MyAlert email={email} showAlert={showAlert} />} 
...
    

MyAlert组件内将显示初始化showAlert,因此警报最初是关闭的,并且仅当用户单击登录按钮时才会触发。

      ...
    const [show, setShow] = useState(showAlert);
...
    

在警报正文中输出电子邮件。

      ...
    <p>
          {email} has successfully signed in!
    </p>
...
    

最后,你的App.js将如下所示:

      import React,{useState} from 'react';
import {Modal, Form} from 'react-bootstrap';
import {Button} from 'react-bootstrap';
import {Alert} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';



function MyAlert({email,showAlert}) {
  const [show, setShow] = useState(showAlert);

  return (
    <>
      <Alert show={show} variant="success">
        <Alert.Heading>Welcome user :)</Alert.Heading>
        <p>
          {email} has successfully signed in!
        </p>
        <hr />
        <div className="d-flex justify-content-end">
          <Button onClick={() => setShow(false)} variant="outline-success">
            Exit
          </Button>
        </div>
      </Alert>

      
    </>
  );
}

function App() {
  const [show, setShow] = useState(false);
  const [email,setEmail]=useState('');
  const [showAlert,setShowAlert]=useState(false);
  const handleClose = () =>{
    console.log(email);
     setShow(false);
     setShowAlert(true);
  }
  const handleShow = () => setShow(true);

  return (
    <>
      <Button variant="primary" onClick={handleShow}>
        Sign In
      </Button>

      <Modal show={show} onHide={handleClose}>
        <Modal.Header closeButton>
          <Modal.Title>Sign In Form</Modal.Title>
        </Modal.Header>
        <Modal.Body>
          <Form>
            <div className="form-group">

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