我是經驗豐富的 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 } }) }
React useState 鉤子影響狀態中使用的默認變量,無論擴展運算符
翻閱古今
2023-11-02 21:23:10