Javascript 获取时会话存储是否有延迟?

Javascript 获取时会话存储是否有延迟?,javascript,reactjs,storage,react-hooks,session-storage,Javascript,Reactjs,Storage,React Hooks,Session Storage,在我的react代码中,在组件内部,我从会话存储(在useEffect钩子内部)获取一个值。当控制台打印时,它显示值。 但是在render(或return方法)内部,它没有刚刚获取的值。从会话存储中提取时是否有延迟 在存储相同的状态并获取内部渲染后,避免了该问题 let myValue = ''; useEffect(()=>{ myValue = sessionStorage.getItem("someKey"); },[]); // In the return method r

在我的react代码中,在组件内部,我从会话存储(在useEffect钩子内部)获取一个值。当控制台打印时,它显示值。 但是在render(或return方法)内部,它没有刚刚获取的值。从会话存储中提取时是否有延迟

在存储相同的状态并获取内部渲染后,避免了该问题

let myValue = '';
useEffect(()=>{
    myValue = sessionStorage.getItem("someKey");
},[]);
// In the return method
return {
    <div>{myValue}</div>
}
让myValue='';
useffect(()=>{
myValue=sessionStorage.getItem(“someKey”);
},[]);
//在返回方法中
返回{
{myValue}
}

为什么从会话存储中获取的值不能立即在渲染中使用?

否,localStorage和sessionStorage调用都是
sync
由于未重新渲染视图,因此在渲染中看不到该值。您必须设置一个状态,获取一个新的道具或强制渲染以查看它

如何在钩子中强制更新

const [, updateState] = React.useState();
const forceUpdate = useCallback(() => updateState({}), []);

否,localStorage和sessionStorage调用都是
sync
由于未重新渲染视图,因此在渲染中看不到该值。您必须设置一个状态,获取一个新的道具或强制渲染以查看它

如何在钩子中强制更新

const [, updateState] = React.useState();
const forceUpdate = useCallback(() => updateState({}), []);

马上就有了

return {
    <div>{sessionStorage.getItem("someKey")}</div>
}
返回{
{sessionStorage.getItem(“someKey”)}
}

它立即可用

return {
    <div>{sessionStorage.getItem("someKey")}</div>
}
返回{
{sessionStorage.getItem(“someKey”)}
}

否,所有会话存储调用都是
同步的
否,所有会话存储调用都是
同步的

这里的问题是您希望变量值更改触发重新渲染。React不以这种方式工作,如果要更改值并重新渲染,则需要另一种方法:

考虑:

const [myValue, setMyValue] = useState('');

useEffect(()=>{
   setMyValue(sessionStorage.getItem("someKey"));
},[]);

// In the return method
return {
    <div>{myValue}</div>
}
const[myValue,setMyValue]=useState(“”);
useffect(()=>{
setMyValue(sessionStorage.getItem(“someKey”);
},[]);
//在返回方法中
返回{
{myValue}
}

这里的问题是,您希望变量值更改触发重新渲染。React不以这种方式工作,如果要更改值并重新渲染,则需要另一种方法:

考虑:

const [myValue, setMyValue] = useState('');

useEffect(()=>{
   setMyValue(sessionStorage.getItem("someKey"));
},[]);

// In the return method
return {
    <div>{myValue}</div>
}
const[myValue,setMyValue]=useState(“”);
useffect(()=>{
setMyValue(sessionStorage.getItem(“someKey”);
},[]);
//在返回方法中
返回{
{myValue}
}

从“useEffect”设置私有变量不会导致重新渲染。您可能需要考虑使用<代码> UsStuts<代码>,这样您就有了一个设置值并注册RealReDelver的机制。这就是我规避问题的方法。从“useEffect”设置私有变量不会导致重新渲染。您可能需要考虑使用<代码> UsStuts<代码>,这样您就有了一个设置值并注册RealReDelver的机制。我就是这样避开了这个问题的。