Javascript 什么';在没有初始属性的情况下,如何更新处于反应状态的对象?

Javascript 什么';在没有初始属性的情况下,如何更新处于反应状态的对象?,javascript,reactjs,object,state,Javascript,Reactjs,Object,State,当无法设置初始属性时,我在更新处于反应状态的对象时遇到问题 在初始状态下,我有一个空对象 然后我有一个处理复选框更改的函数 我在API响应后生成带有复选框的字段,所以我无法将它们设置为初始状态,因为数量或id发生了变化。怎么处理呢?当我尝试选中复选框时,对象中只有一个属性 这是我的组件: const Emails = () => { const [data, setData] = useState(null); const [error, setError] = useSt

当无法设置初始属性时,我在更新处于反应状态的对象时遇到问题

在初始状态下,我有一个空对象

然后我有一个处理复选框更改的函数

我在API响应后生成带有复选框的字段,所以我无法将它们设置为初始状态,因为数量或id发生了变化。怎么处理呢?当我尝试选中复选框时,对象中只有一个属性

这是我的组件:

const Emails = () => {
    const [data, setData] = useState(null);
    const [error, setError] = useState(null);
    const [checkedItems, setCheckedItems] = useState({});

    const { eventId } = useParams();

    const handleCheckboxes = (event) => {
        setCheckedItems({
            ...checkedItems,
            [event.target.id]: event.target.checked
        })
    }

    useEffect(() => {
        fetchEmails();
    }, [])

    const fetchEmails = async () => {
        try {
            const resp = await axios.get(`${url}/${eventId}`);
            const newRows = resp.data.map(row => ({
                emailId: row.id,
                emailName: row.name,
                emailCheckbox: <MDBInput label=" " value={checkedItems[row.id]} id={row.id} type="checkbox" onChange={handleCheckboxes}/>
            }))
            setData({
                columns: [
                    {
                        label: 'Email ID',
                        field: 'emailId'
                    },
                    {
                        label: 'Email name',
                        field: 'emailName'
                    },
                    {
                        label: 'Email checkbox',
                        field: 'emailCheckbox'
                    }
                ],
                rows: newRows
            });
        } catch(error) {
            setError(error.response);
        }
    }

    return (
        <>
            {error ? (
                <h1>{error.data.message}</h1>
            ) : (
                data ? (
                    <Fragment>
                        <h1>Event ID: {eventId}</h1>
                        <MDBDataTable data={data}/>
                    </Fragment>
                ) : (
                    <div className="text-center">
                        <MDBSpinner big/>
                    </div>
                )
            )}
        </>
    )
}
const电子邮件=()=>{
const[data,setData]=useState(null);
const[error,setError]=useState(null);
const[checkedItems,setCheckedItems]=useState({});
const{eventId}=useParams();
const handlecheckbox=(事件)=>{
setCheckedItems({
…检查一下,
[event.target.id]:event.target.checked
})
}
useffect(()=>{
获取电子邮件();
}, [])
const fetchEmails=async()=>{
试一试{
const resp=await axios.get(`${url}/${eventId}`);
const newRows=resp.data.map(行=>({
emailId:row.id,
emailName:row.name,
电子邮件复选框:
}))
设置数据({
栏目:[
{
标签:“电子邮件ID”,
字段:“emailId”
},
{
标签:“电子邮件名称”,
字段:“emailName”
},
{
标签:“电子邮件复选框”,
字段:“emailCheckbox”
}
],
行:新行
});
}捕获(错误){
setError(error.response);
}
}
返回(
{错误(
{error.data.message}
) : (
数据(
事件ID:{eventId}
) : (
)
)}
)
}

发布您的组件您是否使用TypeScript?我用整个组件更新了我的帖子。我没有使用打字脚本