reactjs - useField 钩子的字段显示一个 sessionStorage 条目的值未定义
问题描述
我已经CustomSelectField
在库中定义了如下所示的字段,formik
并尝试通过在控制台日志中打印来查看显示的field
内容,如下所示
const CustomSelectField = ({
placeholder,
disabled,
...props
}) => {
const [field, meta] = useField(props);
const errorText = meta.error && meta.touched ? meta.error : "";
const data = JSON.parse(sessionStorage.getItem(field.name))
console.log("April 23 : Props testing using field");
console.log(field);
const menuItems = (data.map((rec, idx) => {
return (
<MenuItem key={rec.id} value={rec.id}>{rec.description}</MenuItem>
)
}))
return (
<div>
<InputLabel id="selectLabel">{placeholder}</InputLabel>
<Field
labelId={placeholder}
{...field}
disabled={disabled}
as={StyledSelect}
error={!!errorText}>
{menuItems}
</Field>
</div>
);
};
我在我的表格中使用上述内容,如下所示:
<CustomSelectField name="requestPrioritieses" type="select" placeholder="Priority"/>
以下值存储在密钥的会话存储中requestPriorities
。
[{"id":1,"description":"High","_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/1"},
"requestPriorities":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/1"}}},
{"id":2,"description":"Low","_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/2"},
"requestPriorities":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/2"}}},
{"id":3,"description":"Normal","_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/3"},
"requestPriorities":{"href":"http://myserver.hs.abc.com:443/Webservices/api/requestPrioritieses/3"}}}]
Console.log 中的结果如下:
April 23 : Props testing using field
Object { name: "requestPrioritieses", value: 3, onChange: useEventCallback(), onBlur: useEventCallback() }
由于会话存储中有三个 id,我在上面的控制台日志中看到value
了。3
我正在尝试将相同的东西用于会话存储中的不同条目,并且打印value
为undefined
. 不确定id
值是否不规则1
,是2
什么5
原因?这是我在密钥的会话存储中拥有的(值部分)testLevels
:
[{"id":1,"testLevel":"Leve1","description":null,"_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/1"},
"testLevel":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/1"}}},
{"id":2,"testLevel":"Level2","description":null,"_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/2"},
"testLevel":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/2"}}},
{"id":5,"testLevel":"Level3","description":null,"_links":{"self":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/5"},
"testLevel":{"href":"http://myserver.hs.abc.com:443/Webservices/api/testLevels/5"}}}]
我修改了以下内容:
<MenuItem key={rec.id} value={rec.id}>{rec.description}</MenuItem>
至
<MenuItem key={rec.id} value={rec.id}>{rec.testLevel}</MenuItem>
并定义了一个单独const CustomTestLevelSelectField
的以适应上述更改,如下所示:
const CustomTestLevelSelectField = ({
placeholder,
disabled,
...props
}) => {
const [field, meta] = useField(props);
const errorText = meta.error && meta.touched ? meta.error : "";
const data = JSON.parse(sessionStorage.getItem(field.name))
console.log("April 23 : Props testing using field");
console.log(field);
const menuItems = (data.map((rec, idx) => {
return (
<MenuItem key={rec.id} value={rec.id}>{rec.testLevel}</MenuItem>
)
}))
return (
<div>
<InputLabel id="selectLabel">{placeholder}</InputLabel>
<Field
labelId={placeholder}
{...field}
disabled={disabled}
as={StyledSelect}
error={!!errorText}>
{menuItems}
</Field>
</div>
);
};
我在我的表格中使用上述内容,如下所示:
<CustomTestLevelSelectField name="testLevels" type="select" placeholder="Test Level"/>
但是 console.log 显示如下:
April 23 : Props testing using field
Object { name: "testLevels", value: undefined, onChange: useEventCallback(), onBlur: useEventCallback() }
为什么value
不显示3
和显示undefined
?就像requestPriorities
,它应该显示 3 个条目,因为testLevels
sessionStorage 中有 3 个 id。为什么显示未定义?
解决方案
推荐阅读
- sql - 如何使用 ESQL/C 显示约束?
- java - 在 spring-data-rest HAL _links 中将 UUID 编码更改为 base-32
- go - 如何使函数适合 _test 文件?
- orbeon - XForm 模式验证:子模式导入的解析
- python - 如何将用','分隔的数据转换为下一行?(熊猫)
- asp.net-core - 托管在 Azure Cloud 中 kubernetes 上的 ASP .NET Core 应用程序是否知道其域地址?
- c - C: 使用 HTTP 请求发布 json 数据
- gradle - 无法从 gradle build 传递 testNg 命令行参数
- node.js - TypeError:未定义不是一个对象(评估'this.state.project.horarios.map')
- date - 无法在我的 JDBC 代码中从扫描仪获取输入