我有一个使用挂钩初始化状态的父组件。我将钩子的状态和 setState 传递给子对象,但是每当我更新多个子对象的状态时,它们都会更新不是最新状态的状态。
重现问题:当您建立链接并写入您的信息并单击提交时,它会成功附加到父状态。如果在那之后添加另一个,它也会成功附加到父状态。但是当你返回并在第一个链接上按提交时,它会出于某种原因破坏第二个链接。请在我的 codesandbox 上试用。
基本上我想要的是一个创建新表单的按钮。在每种形式中,您都可以选择一种社交媒体类型,如 fb、instagram、tiktok,还可以输入一个文本字段。这些数据存储在状态中,最后当您单击应用更改时,我希望它存储在我的数据库中,即 firestore。你能帮我解决这个问题吗?这是一个代码沙箱。
https://codesandbox.io/s/blissful-fog-oz10p
这是我的代码:
管理员.js
import React, { useState } from 'react';
import Button from '@material-ui/core/Button';
import AddNewLink from './AddNewLink';
const Admin = () => {
const [links, setLinks] = useState({});
const [newLink, setNewLink] = useState([]);
const updateLinks = (socialMedia, url) => {
setLinks({
...links,
[socialMedia]: url
})
}
const linkData = {
links,
updateLinks,
}
const applyChanges = () => {
console.log(links);
// firebase.addLinksToUser(links);
}
return (
<>
{newLink ? newLink.map(child => child) : null}
<div className="container-sm">
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
onClick={() => {
setNewLink([ ...newLink, <AddNewLink key={Math.random()} linkData={linkData} /> ])}
}
>
Add new social media
</Button>
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
style={{marginTop: '50px'}}
onClick={() => applyChanges()}
>
Apply Changes
</Button>
<h3>{JSON.stringify(links, null, 4)}</h3>
</div>
</>
);
}
export default Admin;
猛跑小猪
相关分类