javascript - 反应、可视化和编辑 JSON 对象。填充输入数据
问题描述
我有这种物品
{
asignaturaId: 1,
content: {
[question_var]: {
elements: {
text: 'text1',
image: 'img1.jpg'
}
}
[question_var]: {
text: 'text2',
image: 'image2.jpg'
}
}
}
不同的是key 包含的[question_var]
部分和对象的数量。content
我希望能够动态地写出输入上的所有数据并能够替换所需的数据。
到目前为止,我得到了这个:
[...]
<FormControl>
<InputLabel htmlFor="modulo">Asignatura ID:</InputLabel>
<Input id="asignaturaId" name="asignaturaId" value={arrayData[0]} onChange={(e) => setAsignaturaId(e.target.value)} />
</FormControl>
{arrayData.map(pregunta => {
console.log(pregunta)
return (
<>
<FormControl>
<InputLabel htmlFor="texto">Texto:</InputLabel>
<Input id="texto" name="texto" onLoad={() => setTexto(pregunta[1].elements.text)} value={pregunta[1].elements} onChange={(e) => setText(e.target.value)} />
</FormControl>
[...]
我忽略的是,我拿走了这个对象,Object.entries(myObject)
然后把它分配给了arrayData
数组。asignaturaId
将只是我收到的每个对象的一个键,因此我可以轻松地传递该值并在输入时更改它。问题是content
,因为它是动态的并且变化太多,我发现很难使用useEffect()
钩子用我收到的数据填充我的输入并在同一输入中操作它而不用相同的键或直接更改其他值,根本无法编辑它们。
我有4天的时间解决这个问题。请帮忙!
编辑:我对我的英语感到抱歉,如果我没有说清楚,我想覆盖对象,将用户不更新的数据保留在前端。
解决方案
首先在你的 React 钩子组件中清除你的 json 数组,并确保每个对象都应该有唯一的键
const [yourJson,setYourJson] = useState({
asignaturaId: 1,
content: {
[question_var1]: {
elements: {
text: 'text1',
image: 'img1.jpg'
}
},
[question_var2]: {
text: 'text2',
image: 'image2.jpg'
}
}
});
添加 Setter 以在您的 json 内容中添加新对象
const addNewData = (text, imgSrc) =>{
let newIndex = Object.keys(yourJson.content).length + 1;
let newJson = yourJson;
newJson.content[`question_var${newIndex}`] = {
'text': text,
'image': imgSrc
}
setYourJson({...newJson})
}
在渲染回调中使用这个映射
<FormControl>
{Object.keys(yourJson.content).map(key => (
<InputLabel htmlFor="texto">{yourJson.content[key].text}</InputLabel>
// <Input id="texto" name="texto" ....
))}
</FormControl>
推荐阅读
- ios - 如何在 Swift 中屏蔽 UIStackView?
- swift - UIStackView() 不显示
- java - 如何单个函数调用多个活动?
- android - 为什么我的编辑文本启用时没有出现闪烁的光标?
- c++ - Codeforces 中的左撇子、右撇子和 Ambidexters 问题给了我一个错误
- azure - 是否可以使用 Azure 网络安全组仅允许从 Web 应用访问数据库 VM?
- python - Appjar 标签不会更新
- c# - 通过 URL 将加密的密钥特殊字符传递给 consteller
- progressive-web-apps - 无法获取 PWA 的“安装”选项
- rust - 不知道如何进行匹配