【发布时间】:2021-03-08 11:29:34
【问题描述】:
我有 3 个文件:
- 主要组件,
- 具有存储在本地存储中的状态的文件
- 具有重置功能的文件,用于将这些相同的状态重置为默认值 价值观。
我在主组件中导入带有状态和重置文件的文件,一切正常。但是当我尝试使用重置功能将 localState 值设置为默认值时,我收到错误“错误:无效的挂钩调用。拦截器只能在功能组件的主体内部调用。 "
我阅读了有关 react 的文档,但我不明白错误
第一个文件代码:
import React from "react";
import { LocalStorage } from "./localState";
import { resetLocalStorage } from "./resetLocalState";
function App() {
const localState = LocalStorage(); // local storage keys
const resetState = () => resetLocalStorage(); // reset local storate states
return (
<div>
<button onClick={() => resetState()}>Refresh State to default</button>
<br />
<button
onClick={() => localState.setLocalStorageState("State was changed")}
>
Change State
</button>
<p>{localState.localStorageState}</p>
</div>
);
}
export default App;
第二个文件代码:
import { useState, useEffect } from "react";
const useLocalStorageList = (key, defaultValue) => {
const stored = localStorage.getItem(key);
const initial = stored ? JSON.parse(stored) : defaultValue;
const [value, setValue] = useState(initial);
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
};
//local storage keys
export const LocalStorage = () => {
const [localStorageState, setLocalStorageState] = useLocalStorageList(
"State",
"Default Value"
);
return { localStorageState, setLocalStorageState };
};
第三个文件代码
import { LocalStorage } from "./localState";
export const resetLocalStorage = () => {
const localState = LocalStorage(); //local storage keys
localState.setLocalStorageState("Default Value");
};
【问题讨论】:
-
也将 LocalStorage 转换为自定义钩子
-
自定义挂钩应以“使用”开头。 reactjs.org/docs/hooks-custom.html
-
重置函数不是一个有效的钩子。 Hooks 必须在函数组件的主体中,Yours 是组件内部函数的一部分。这是不允许的
-
你想达到什么目的?对于您的用例而言,这在我看来太复杂了
-
@messerbill,那是代码,例如,我的真实代码更大,因此我想将我的代码分成小部分
标签: javascript reactjs import local-storage