javascript - 具有动态主体的 ReactJs 引导模式
问题描述
我正在一个网站上工作,登录、注册和忘记密码弹出窗口会交替出现(不是一次)。所以我想创建一个具有多个正文内容组件的模式。
但我无法弄清楚如何显示这些。当我单击登录或注册按钮时,模态内容附加到模态,但不显示
页脚.js
import React, { Component } from 'react'
import ModalTemplate from './modals/ModalTemplate'
class Footer extends React.Component {
render() {
return (<><ModalTemplate /></>)
}
}
export default Footer
页脚.js
import React, { Component } from 'react'
import ReactDOM from "react-dom"
import LoginModalBody from './modals/LoginModalBody'
import RegisterModalBody from './modals/RegisterModalBody'
class Header extends Component {
Login() {
ReactDOM.render(<LoginModalBody />, document.getElementById('common_modal_content'));
}
Register() {
ReactDOM.render(<RegisterModalBody />, document.getElementById('common_modal_content'));
}
render() {
return (
<div className='fd bg_Header height_100vh p_5'>
<div className='mainSize'>
<div className="fd">
<div className="row m_0 p_tb_15">
<div className="col-sm-4 col-md-4">
<img className="logoSize" src={Constants.Application.PUB_URL + "/img/logo.svg"} />
<img src={Constants.Application.PUB_URL + "/img/icons/menu.svg"} className="float-right m_r_15 pointer menuIcn"
width="30px" />
</div>
<div className="col-sm-8 col-md-8">
<span className="pointer" onClick={this.Login}>LOGIN
</span> | <span className="pointer" onClick={this.Register}>REGISTER </span>
</div>
</div>
</div>
</div>
)
}
}
export default Header
模态模板.js
import React, { Component } from 'react'
class ModalTemplate extends React.Component {
render() {
return (<> <div id="common_modal" tabindex="-1" role="dialog" class="modal fade">
<div class="modal-dialog">
<div class="modal-content" id="common_modal_content">
</div>
</div>
</div></>);
}
}
export default ModalTemplate;
登录ModalBody .js
import React, { Component } from 'react'
class LoginModalBody extends React.Component {
showModal() {
document.getElementById('common_modal').classList.add('in')
document.getElementById('common_modal').classList.add('show')
}
hideModal() {
document.getElementById('common_modal').classList.remove('in')
document.getElementById('common_modal').classList.add('hide')
}
componentDidMount() {
this.showModal();
}
render() {
return (<>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<div className="fd">
<h6 className="p_t_15"><b>Log in continue</b></h6>
<input type="text" placeholder="Email address"
className="fd m_t_15 form-control bck_ligrey bdr_0" />
<input type="text" placeholder="Password"
className="fd m_t_15 form-control bck_ligrey bdr_0 brdr_grey" />
<div className="fd m_t_15">
<input type="checkbox" />
<font color="#ddd">Remember My password</font>
<p className="float-right font-12 m_0">Show password</p>
</div>
<button type="button" className="btn fd btn_orng font-12 m_tb_10"> Log in</button>
<div className="fd p_b_15 text-center">
<a href="#"><u><b>Forgot password?</b></u></a>
</div>
<p className="fd m_b_10 m_t_30 text-center"><span className="font-10">Don't have an account?</span> <a
href="#"><b>Sign Up</b></a></p>
</div>
</div>
</>
);
}
}
export default LoginModalBody;
解决方案
- 在单独的文件中添加您的模态组件并将其导入页脚或页眉中。
const [content, setContent] = useState();
状态为您的内容。
- 您需要创建一个函数来定义要显示的模态内容。您可以按如下方式传递类型:`onClick={() => callModalComponent('login')}
您的功能将类似于:
const callModalComponent = (type: string) => {
if(type === 'login'){
setContent(<LoginComponent />) // set state content as per your form requirement
} else if(type === 'register'){
setContent(<RegisterComponent />)
}
openModalContainer() // this will open your modal.
}
推荐阅读
- java - Maven - 在编译时发现类类型
- python - 如何平滑 z 值并减少其在 python 中的变化?
- php - 使用 html encode(yii2) 显示数据库中的数据
- python - 带有 python 子进程的 WSL
- nlp - 有没有办法将 spacy 标签列入白名单?
- google-apps-script - 无法在 Google 表格中设置值
- php - 在 WooCommerce 电子邮件通知中将发件人姓名更改为客户账单全名
- html - 是否可以在 transform: translateX 中使用 %vw?
- python - pybind11:通过值/引用将 numpy 数组传递给 c++
- css - 修复了滚动时移动设备上的背景缩放