reactjs - 反应形式,如果长度 < 1 则删除先前的状态
问题描述
我想制作一个包含多个字段的表单,但我只想填充实际使用的字段,例如在下面的代码中,如果字段的长度超过 1,它会出现,但如果我删除它并它变为 0,然后我不想将数据保持在状态,但是我拥有它的方式,该字段仍然显示 sku: 45FGH, title: ""
,我需要它来摆脱根本没有的数据,就好像它从未填充过一样. 所以在前一种情况下,由于我在标题中输入了一些内容并随后将其删除,我只想保持sku: 45FGH
状态并摆脱title: ""
import React, {useState} from 'react'
function TheForm() {
const [data, setData] = useState({})
const handleChange = (e, key) => {
if(e.target.value.length >= 1) return setData(prevState => {
return {...prevState, [key]: e.target.value}
})
}
console.log(data);
return (
<div>
<input placeholder="sku" onChange={(e) => handleChange(e, 'sku')}/>
<input placeholder="title" onChange={(e) => handleChange(e, 'title')}/>
<input placeholder="location" onChange={(e) => handleChange(e, 'location')}/>
</div>
)
}
export default TheForm
主要问题是我使用的是graphql,如果我提供一个字段,它必须包含一些东西,有时我不会使用所有字段,如果我在其中一个字段中错误地输入了一些东西,它会破坏POST请求。
问题是,不是关于被渲染,而是关于保持状态的数据,假设我有 3 个字段,sku、标题和位置。如果我只想要 sku 和 location 输入它并且只有这 2 个字段被创建或添加到状态中,则永远不会添加标题,但是如果我在标题中输入一些内容然后删除它,那么它们中的 3 个现在与标题处于活动状态是空的。这不是我想要的,我需要完全脱离状态的标题。
解决方案
为了避免混乱的代码,你应该尽可能地把逻辑排除在 JSX 之外。在某些情况下,使用条件运算符非常有用,该运算符在不为 true 时返回 null 而不是您的组件。例如:
function TheForm() {
...
return (
<form>
{ data.sku.length() > 0 ? <input value={data.sku} ... /> : null }
...
</form>
)
}
推荐阅读
- c# - xUnit、SpecFlow Selenium 和 ITestOutputHelper 问题
- r - 如何对具有相同 ID 的所有观察结果进行变异?
- ansible - 从角色复制整个文件夹结构与现有文件合并/覆盖
- python - 当函数调用很长时,VS Code for Python 进入新行
- python - 在 stepik 上上传时超过 python 的时间限制
- javascript - 在 forEach 中使用替换字符串方法
- google-sheets - 在 Google 表格中的等号后使用通配符 - SUM IMPORTRANGE
- python - 卸载后在 Windows 开始菜单中显示 Python
- bash - bash将具有特定前缀的所有环境变量导出到文件夹
- javascript - JS:当你不关心返回值时,如何解决一个承诺?