Есть ли задержка при загрузке в хранилище сеансов? - PullRequest
1 голос
/ 24 июня 2019

В моем коде реагирования внутри компонента я получаю значение из хранилища сеанса (внутри хука useEffect). Когда консоль напечатана, она показывает значение. Но внутри рендера (или метода возврата) у него нет только что извлеченного значения. Есть ли задержка при извлечении из хранилища сеансов?

Обошел проблему после сохранения того же самого в состоянии и извлечения внутри рендера!

let myValue = '';
useEffect(()=>{
    myValue = sessionStorage.getItem("someKey");
},[]);
// In the return method
return {
    <div>{myValue}</div>
}

Почему значение, извлекаемое из хранилища сеансов, не доступно сразу при рендеринге?

Ответы [ 4 ]

4 голосов
/ 24 июня 2019

Проблема здесь в том, что вы ожидаете, что изменение значения переменной вызовет повторную визуализацию.React не работает таким образом, и вам понадобится другой подход, если вы хотите изменить значение и сделать его повторный рендеринг:

Обратите внимание:

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

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

// In the return method
return {
    <div>{myValue}</div>
}
1 голос
/ 24 июня 2019

Нет, вызовы localStorage и sessionStorage sync Вы не видите значение в рендере, потому что представление не перерисовывается. Вы должны установить состояние, получить новый реквизит или заставить рендер увидеть его.

Как принудительно обновить в крюках

const [, updateState] = React.useState();
const forceUpdate = useCallback(() => updateState({}), []);
0 голосов
/ 24 июня 2019

Нет, все вызовы sessionStorage synchronous.

0 голосов
/ 24 июня 2019

Доступно сразу

return {
    <div>{sessionStorage.getItem("someKey")}</div>
}
...