Javascript 更改对象的值
嗨,我有以下对象,基本上它是react应用程序中的一个状态。因此,我想要实现的是,创建一个函数,该函数可以根据在函数中传递的内容更改键的值,然后更新状态。在该函数中,我可以发送多个键来更改其值,当前发送showProduct,但也可以发送isEditable。此外,我还需要更改字符串中的idJavascript 更改对象的值,javascript,reactjs,Javascript,Reactjs,嗨,我有以下对象,基本上它是react应用程序中的一个状态。因此,我想要实现的是,创建一个函数,该函数可以根据在函数中传递的内容更改键的值,然后更新状态。在该函数中,我可以发送多个键来更改其值,当前发送showProduct,但也可以发送isEditable。此外,我还需要更改字符串中的id let obj = { id: "", isEditable: false, showProduct: false, shipment: false, c
let obj = { id: "",
isEditable: false,
showProduct: false,
shipment: false,
create_shipment: false}
这就是我尝试过的,比如检查名称是否等于key,然后对其进行操作。这是正确的方法吗
const handler = (name,id) => {
const prevState = {...obj}
for (let [key, value] of Object.entries(prevState)) {
if(key === name) {
key = !value
}
}
setState(prevState)
}
handler('showProduct',id)
可以使用动态键标识要更新的特定属性
const handler = (name, id) => {
setState(prevState => ({
...prevState, // shallow copy state
id: id ?? prevState.id, // updates id if not null/undefined
[name]: !prevState[name], // toggle property by dynamic key
}));
};
如果您想使用单个函数来更改对象的值,则需要传递两个参数。要更改的第一个键和第二个值 因此,您需要更改您的函数,如下所示:-
const handler = (key, value) => {
setState(prevState => ({
...prevState,
[key]: value
}));
};
handler("showProduct", true)
handler("id", "newId")
不应将SetState用于对象状态值。顺便说一句,你可以使用useReducer
const initState = {
id: "",
isEditable: false,
showProduct: false,
shipment: false,
create_shipment: false
}
const objReducer = (state, action) =; {
switch (action.type) {
case "MODIFY_OBJECT":
return {
...state,
[action.payload.key]: [action.payload.value]
};
default:
throw new Error();
}
};
const [state, dispatch] = useReducer(objReducer, initState);
然后,您可以通过如下方式分派操作来修改对象:
dispatch({ type: "MODIFY_OBJECT", payload:{key: 'id', value: 'newId'}});
不是真的。另外,在哪里使用传递的id参数?这是用来替换对象的id属性的吗?您询问的是正确的方法,答案可能很宽泛。您发布的代码可以完成它的工作,但这是处理状态的最佳方式吗?更新,谢谢@tj使用状态挂钩是可以接受的。若状态更复杂并且有嵌套属性,那个么我倾向于同意usereducer可能是一个更好的选择。另外,除非有新语法,否则代码段中会出现问题,dispatch只使用一个参数,并且action对象上没有有效负载属性,因此您的reducer逻辑将抛出错误。感谢您的评论,我已编辑了我的答案:D