javascript - 使用 Hooks 构建 react-bootstrap 表单
问题描述
我正在构建一个模式表单,以便能够将信息保存在数据库中。我做了一个页面来显示人员列表。
对于显示的每个人,都有一个按钮允许将此人添加为应用程序的用户。在按钮的单击事件中,我构建了一个模式表单,其中包含我们必须填写的两个字段(用户名、密码),然后单击“保存”按钮以保存数据。
我将不同的字段与来自 react 的 hooks 对象相关联。但我遇到了一个问题:我无法在模式表单上的字段中输入值。
这是我的代码:PersonsPage.jsx
import React, {useEffect, useState} from "react";
import {Link, NavLink} from "react-router-dom";
import ModalForm from "../../components/Forms/ModalForm";
import moment from "moment";
const PersonsPage = (props) => {
const [persons, setPersons] = useState([]);
const [openModal, setOpenModal] = useState(false);
let [children, setChildren] = useState(null);
const [user, setUser] = useState({"username" : "", "password" : ""});
const handleModalFormClose = () => {
setChildren(null);
setOpenModal(false);
};
const handleUserChange = (event) => {
const {currentTarget} = event;
const {name, value} = currentTarget;
setUser({...user, [name]: value});
};
const onSubmitUser = (event) => {
event.preventDefault();
};
const showModalUser = (person) => {
setMsgTitle("Ajout d'un utilisateur");
let children = () => {
return(
<>
<p>Ajout de <strong>{person.fullName}</strong> comme utilisateur</p>
<hr/>
<Field
name="username"
label="Nom utilisateur"
placeholder="Son identifiant de connexion"
type="text"
value={user.username}
onChange={handleUserChange}
/>
<Field
name="password"
label="Mot de passe"
placeholder="Son mot de passe de connexion"
type="password"
value={user.password}
onChange={handleUserChange}
/>
</>
);
};
setChildren(children());
setOpenModal(true);
};
return (
<>
<div className="person">
{persons.map(person =>
<div key={person.id} className="card person-card border-primary mb-2 ml-2">
<div className="card-header">
<span className="badge badge-primary">{person.civilityName}</span>
</div>
<div className="card-img mb-1">
<NavLink to={person.slug}>
<img className="card-img-top avatar" src={person.avatarUrl} alt="Image ou avatar"/>
</NavLink>
</div>
<div className="card-body">
<div className="full-name px-2">
<h5 className="card-title">{person.fullName}</h5>
</div>
<div className="card-text px-2 py-2">
<h6>
Born on
{moment(person.bornAt).format('ddd DD MMM YYYY')} at {person.birthPlace}, <span
className="badge badge-success">{person.maritalStatusName}</span>
</h6>
<span className="badge badge-info">{person.age}</span>
</div>
</div>
<div className="card-footer">
<button
className="btn btn-primary mr-1 mb-2"
>
<i className="fas fa-edit">{}</i>
</button>
<button
className="btn btn-danger mr-1 mb-2"
onClick={() => handleDelete(person)}>
<i className="fas fa-trash">{}</i>
</button>
<div className="btn-group dropright mr-1 mb-2">
<button
type="button"
className="btn btn-info"
onClick={() => showDetails(person)}>
<i className="fas fa-info fa-1x">{}</i>
</button>
<button
className="btn btn-sm btn-info dropdown-toggle"
type="button" id="dropdownMenu2"
data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
</button>
<div className="dropdown-menu" aria-labelledby="dropdownMenu2">
<button className="dropdown-item" type="button"
onClick={() => showDetails(person.id)}>Details
</button>
<button className="dropdown-item" type="button">
{ (person.hasFirstName) ? "Manage firstNames" : "L'ajouter un prénom" }
</button>
<button className="dropdown-item" type="button">
{(person.hasEmail) ? "Gérer ses emails" : "Add email"}
</button>
<button className="dropdown-item" type="button">{(person.hasPhoneNumber) ? "Gérer ses contacts téléphoniques" : "New phone contact"} </button>
<button className="dropdown-item" type="button">{(person.hasAddress) ? "Changer son adresse" : "New address"}</button>
{!(person.hasValidIdentityCard) && <button className="dropdown-item" type="button">Change Identity Card <span className="badge badge-danger">invalid</span></button>}
{!person.isUser && <button className="dropdown-item" type="button" onClick={() => showModalUser(person)}>Add as user</button>}
</div>
</div>
</div>
</div>
)}
</div>
<ModalForm
onShow={openModal}
title={msgTitle}
onClose={handleModalFormClose}
onSave={onSubmitUser}
>
{children}
</ModalForm>
<>
)
}
这是我的代码:ModalForm.jsx
import React from "react";
import Modal from "react-bootstrap/Modal";
import Button from "react-bootstrap/Button";
const ModalForm = ({onShow:onShow, onClose:onClose, title:title, onSave:onSubmit, children:children}) => {
return (
<Modal
show={onShow}
onHide={onClose}
backdrop="static"
keyboard={false}
size="lg"
aria-labelledby="contained-modal-title-vcenter"
centered
>
<form onSubmit={onSubmit}>
<Modal.Header closeButton>
<Modal.Title id="contained-modal-title-vcenter">{title}</Modal.Title>
</Modal.Header>
<Modal.Body style={{'maxHeight': 'calc(100vh - 210px)', 'overflowY': 'auto'}}>{children}</Modal.Body>
<Modal.Footer>
<Button className="btn btn-info mr-2" onClick={onClose}><i className="fas fa-window-close">{}</i> Close</Button>
<Button type="submit" className="btn btn-success mr-2"><i className="fas fa-check-circle">{}</i> Save</Button>
</Modal.Footer>
</form>
</Modal>
);
};
export default ModalForm;
解决方案
推荐阅读
- python - 最小值和最大值
- android - 获取系统音频流
- objective-c - 如果创建了多个会话,如何停止当前的 URLSession?
- isabelle - 如何在 Isabelle 中显示函数的定义
- android - 请确认在 Firebase 控制台中配置了正确的包名称和 SHA-1
- python - Pytest在没有参数化参数的情况下向调用者函数添加描述
- java - 无法将值放入 Java Spring Boot 中的 SQL 语句
- wagtail - 查询集合以获取集合的 id
- reactjs - 从 JSON 文件中动态显示 reactjs 图标图标名称
- ios - 通过在 UIView 之外点击来关闭 ViewController 中的 UIView