【发布时间】:2019-11-19 11:43:14
【问题描述】:
我正在尝试为应用程序创建登录模式表单。但是,我希望在单击链接而不是按钮时出现弹出窗口。换句话说,当我单击导航栏中的登录链接时,我不想完全重定向到另一个页面。我只想弹出模态框。
我对 ReactJS 很陌生,所以我不知道该怎么做。有人可以帮我理解如何让这个功能工作吗?我真的很感激。
此外,如果有人知道有关如何实现正确登录表单的一些重要资源,我也将不胜感激。我在 CodePen 上找到了一些,但没有一个真正展示了如何构建这个组件的清晰易懂的方法。至少,对于像我这样的初学者来说。
下面是我的代码。另外,如果有帮助,我提供了指向我当前使用的站点的链接,作为构建此代码的参考。
资源:https://react-bootstrap.github.io/components/modal/
App.js
import React from 'react';
import {BrowserRouter, Route, Switch} from 'react-router-dom'
import Navbar from './components/Navbar/navbar.js';
import Footer from './components/Footer/footer.js';
import Home from './pages/Home/home.js';
import Login from './pages/Login/login.js';
import Languages from './pages/Languages/languages.js';
function App() {
return (
<div className="App">
<BrowserRouter>
<Navbar/>
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/login" component={Login}/>
<Route path="/languages" component={Languages}/>
</Switch>
</BrowserRouter>
<Footer />
</div>
);
}
export default App;
Navbar.js
import React from 'react';
import { Link } from 'react-router-dom';
import './navbar.css';
const Navbar = () => {
return (
<nav className="navbar navbar-expand-sm navbar-dark px-sm-5">
<div className="container">
<Link to='/'>
<div className="navbar-brand">
<i class="fas fa-globe fa-2x"></i>
</div>
</Link>
<ul className="navbar-nav align-items-right">
<li className="nav-item ml-5">
<Link to="/login" className="nav-link">
Log In
</Link>
</li>
<li className="nav-item ml-5">
<Link to="/signup" className="nav-link">
Sign Up
</Link>
</li>
</ul>
</div>
</nav>
)
}
export default Navbar;
Login.js
import React, { Component } from 'react';
// import { connect } from 'react-redux';
import Modal from 'react-bootstrap/Modal';
import Button from 'react-bootstrap/Button';
import './login.css';
class Login extends Component {
constructor(props, context) {
super(props, context);
this.handleShow = this.handleShow.bind(this);
this.handleClose = this.handleClose.bind(this);
this.state = {
show: false,
};
}
handleClose() {
this.setState({ show: false });
}
handleShow() {
this.setState({ show: true });
}
render() {
return (
<>
<Button variant="primary" onClick={this.handleShow}>
Launch demo modal
</Button>
<Modal show={this.state.show} onHide={this.handleClose}>
<Modal.Header closeButton>
<Modal.Title>Login</Modal.Title>
</Modal.Header>
<Modal.Body>...</Modal.Body>
<Modal.Footer>
<Button variant="danger" onClick={this.handleClose}>
Cancel
</Button>
</Modal.Footer>
</Modal>
</>
);
}
}
export default Login;
【问题讨论】:
-
登录组件看起来不错,您应该与我们分享导航栏标记,以便我们向您展示如何在没有链接的情况下执行此操作。
-
@ChristopherNgo 哎呀!我完全忘记了包含该代码。对此感到抱歉,但感谢您指出!更新后的代码现在应该可用了。
-
为什么使用链接而不是使用按钮或列表项!
-
@GalaXee95 请参阅下面的解决方案,这应该让您了解如何集成此功能。
-
@adel 因为我只在导航栏上使用过链接。我没有其他选择的经验。
标签: reactjs react-redux react-bootstrap react-modal