javascript - 来自 JSON 的 React Dynamic 中的状态管理
问题描述
我有一个以这种方式模板化的动态表单:
class betClient extends Component(
state = {
.............
}
................
const ServerConfigDetails = this.state.ServerConfigDetail.map(field => {
let SecretFields = "access_token" || "api_token" || "private_token" || "password" || "security_token" || "client_secret" || "refresh_token" || "oauth_client_id" || "oauth_client_secret" || "developer_token"
if (field.name === SecretFields) {
return <SecretInput inputlabel = {
field.name == SecretFields ? field.name : null
}
placeholder = {
field.placeholder
}
/>
}
if (field.name === "start_date") {
return <SelectDateInput inputlabel = "Start Date" / >
}
if (field.name === "end_date") {
return <SelectDateInput inputlabel = "End Date" / >
}
// Here we template all other fields that aren't date or secret field
if (field.name !== SecretFields) {
return <TextInputs inputlabel = {
field.label == null ? field.name : field.label
}
placeholder = {
field.placeholder
}
/>
}
})
render() {
return (
<div>
<Modal>
<form>
{ServerConfigDetails}
</form>
</Modal>
</div>
)
}
)
一切正常,表单是动态呈现的,但我不知如何不知道如何将表单输入最好作为一个对象进入一个状态,而不必在初始状态下单独声明每个字段。有什么帮助吗?
不确定这是否足够清楚,但我很乐意提供任何额外的信息。
解决方案
我首先建议,我们应该决定我们的状态如何——
{
selects: {
// With individual keys with default values
},
dynamic: {} // no key-value pairs at first
}
然后让你所有的组件——受控——你通过传递一个 value 属性来控制要设置的内容(最后传递给你的本地输入)
const { selects, dynamic } = this.state;
// pass a value prop as selects.<key-name> or empty string
最后为您的选择和动态输入字段组件添加 onChange 处理程序。(最后传递给您的本机输入)
onChangeSelectField (event, fieldName) {}
//Same for InputField
这些处理程序将处理状态,如果事件目标中的值不存在,则添加键;如果输入了新值,则添加替换(覆盖)当前键值。
{
const currentDynamicData = this.state.dynamic;
const newData = { ... currentDynamicData, {... updatedData}}; // updatedData is newer key-value pair
this.setState({ dynamic: newData });
}
这是一种解决方法。
推荐阅读
- go - 如何修复'(1<<100)*0.1 和 (1<<100)/10'
- embedded-linux - 使用 LIRC 的 IR 遥控器。(NEC)
- amazon-web-services - 重定向无效的 API URL
- python - 如何计算字典键和总和值的出现并打印它们?
- ios - iOS 上的 NFC 背景读取 - 通用链接在 Safari 中不断打开
- vue.js - 在 Nuxt 中将 Vue 作为浏览器模块导入
- java - 在 Spring Batch 应用程序中自定义步骤的参数
- php - 传递给 Illuminate\Database\Grammar::columnize() 的参数 1 必须是数组类型,给定字符串
- micropython - 是否可以将 MicroPython 嵌入到 CPython 应用程序中?
- python - OCR 的背景图像清理