Next.js Discord

Discord Forum

Local storage

Answered
Zepeto posted this in #help-forum
Open in Discord
Hi, I'm trying to access the local storage in my helper.ts file, however I have this error :
Error: localStorage is not defined
How can I accomplish that ?
Answered by B33fb0n3
no, because it needs the local storage. The server (server component) don't know any local storage. Because of that, it need to be importated like that and need to be clientside
View full answer

29 Replies

@B33fb0n3 localStorage is only available in client component. You added use client on top?
Yes but then I have an error when calling the function in my helper file TypeError: (0 , _lib_helper__WEBPACK_IMPORTED_MODULE_3__.testFunction) is not a function
@Zepeto Yes but then I have an error when calling the function in my helper file `TypeError: (0 , _lib_helper__WEBPACK_IMPORTED_MODULE_3__.testFunction) is not a function`
try to import the component that need the helper function like this:
const ComponentC = dynamic(() => import('path/to/Component'), { ssr: false })
@Zepeto You mean I should import the helper file this way ?
nah, only the component that uses your helper
@B33fb0n3 nah, only the component that uses your helper
Oh okay, but I'm using the function in the server component of my page
Should I call it in a client component ?
@Zepeto Should I call it in a client component ?
yea, localStorage is only available in client component.
@B33fb0n3 yea, localStorage is only available in client component.
And then call my client component in my server one ?
I created this function in a file
"use client";

export const getLocalStorage = (key: string) => {
  return localStorage.getItem(key);
};

Then I call it in my helper file (which is not a client component)
export const testFunction = () => {
  const test = getLocalStorage("test");
  console.log(test);
};

But I still have this error (0 , _client_helper__WEBPACK_IMPORTED_MODULE_2__.getLocalStorage) is not a function
@B33fb0n3 try to import the component that need the helper function like this: tsx const ComponentC = dynamic(() => import('path/to/Component'), { ssr: false })
Promise<typeof import("...mypath")>' is not assignable to parameter of type 'DynamicOptions<{}> | Loader<{}>'.
@B33fb0n3 which one did you try now? testFunction or getLocalStorage?
importing getLocalStorage in the helper file (which contain the testFunction)
@Zepeto importing getLocalStorage in the helper file (which contain the testFunction)
can you give me an reproduction repo? For example through jsfiddle or https://codesandbox.io/ ?
Sure let me 15min
@Zepeto https://codesandbox.io/p/devbox/vibrant-wilbur-nd5fg5
I modified your repo a bit to make it work: https://codesandbox.io/p/devbox/vibrant-wilbur-nd5fg5
You can see, that you need to import the Component that uses the helper function without SSR. After that, there are no more errors
@Zepeto I still see the errors
Whoops, I shared the wrong link. This is the right one: https://codesandbox.io/p/devbox/epic-panka-xykssv
@Zepeto My page.tsx is a server component 🥲
I changed the code, so page.tsx is not a client component anymore
@B33fb0n3 I changed the code, so page.tsx is not a client component anymore
Thanks, can SomeComponent.tsx be a server component too ?
@Zepeto Thanks, can SomeComponent.tsx be a server component too ?
no, because it needs the local storage. The server (server component) don't know any local storage. Because of that, it need to be importated like that and need to be clientside
Answer
okay thanks 🙂
sure thing