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