【发布时间】:2021-03-17 01:52:02
【问题描述】:
我有一个模式,它将对象 newCompanies 的每个元素映射到一行:
{newCompanies.map((company, index) => {
return (
<div>
<div
className="side-by-side"
>
<ModalInput
type="text"
id="name"
value={company.name}
onChange={(e) =>
this.editCompanyArr(index, "name", e, "validName")
}
></ModalInput>
<ModalInput
type="text"
id="website"
value={company.website}
onChange={(e) =>
this.editCompanyArr(
index,
"website",
e,
"validWebsite"
)
}
></ModalInput>
<ModalInput
type="text"
id="sector"
value={company.class}
onChange={(e) =>
this.editCompanyArr(
index,
"sector",
e,
"validSector"
)
}
></ModalInput>
ModalInput 定义在styles.js:
export const ModalInput = styled.input`
padding: 10px;
margin: 10px 0;
border: 1px solid #f5f6f9;
border-radius: 20px;
background-color: #f5f6f9;
height: 100%;
width: ${props => props.width || 'auto'};
`;
这是检查用户是否输入正确值的功能。例如,如果名称中包含数字,则validName 的值将变为false:
editCompanyArr(i, obj, e, stateObject) {
const { newCompanies, validName } = this.state;
if (e.target.value.match("^[a-zA-Z ]*$") != null) {
this.setState({ [stateObject]: true });
} else {
this.setState({ [stateObject]: false });
}
//edited out more body to update value in newCompanies
}
如何确保如果用户为任何映射行输入了错误的输入,那么只有该特定输入而不是其他输入会显示红色边框?
【问题讨论】:
-
我更新了我的答案,考虑看看并提供一些反馈!问候
-
你能通过循环传递id吗?可能吗?
newCompanies对象的结构是什么。最好和最简单的方法是将带有错误状态的 id 存储在 state 中,并根据错误值和 id 将 props 传递给styled-component进行比较。以下答案令人困惑。
标签: javascript css reactjs