我是经验丰富的 js/React 开发人员,但遇到了我无法解决的情况,而且我不知道如何修复它。
我有一个具有许多不同状态的上下文提供程序,但一种状态如下所示:
const defaultParams = {
ordering: 'price_asc',
page: 1,
perPage: 15,
attrs: {},
}
const InnerPageContext = createContext()
export const InnerPageContextProvider = ({ children }) => {
const [params, setParams] = useState({ ...defaultParams })
const clearParams = () => {
setParams({...defaultParams})
}
console.log(defaultParams)
return (
<InnerPageContext.Provider
value={{
params: params,
setParam: setParam,
clearParams:clearParams
}}
>
{children}
</InnerPageContext.Provider>
)
}
我在页面上有一个按钮,它调用clearParams函数,并且应该将参数重置为默认值。但它不起作用
即使当我console.log(defaultParams)在每个提供者重新渲染时,defaultParams当状态改变时变量似乎也在改变
我认为这不正常,因为我已经使用过{...defaultParams},它应该创建新变量,然后将其传递给useState钩子。
我努力了:
const [params, setParams] = useState(Object.assign({}, defaultParams))
const clearParams = () => {
setParams(Object.assign({}, defaultParams))
}
const [params, setParams] = useState(defaultParams)
const clearParams = () => {
setParams(defaultParams)
}
const [params, setParams] = useState(defaultParams)
const clearParams = () => {
setParams({
ordering: 'price_asc',
page: 1,
perPage: 15,
attrs: {},
})
}
除了第三种方法之外,上述方法都不起作用,我将相同的对象硬编码为defaultParams. 这个想法是将 dafult 参数保存在某处,当用户清除参数时恢复它。你们有什么想法可以做到这一点吗?
编辑: 这就是我更新参数的方式:
const setParam = (key, value, type = null) => {
setParams(old => {
if (type) {
old[type][key] = value
} else old[key] = value
console.log('Params', old)
return { ...old }
})
}
慕码人2483693
相关分类