-1

I'm trying to write and context to set an id in local storage . Here's my code

import React, {
  createContext,
  useEffect,
  useMemo,
  useState,
  ReactNode,
} from 'react';

// Interface pour le contexte Transporter
interface TransporterContextProps {
  transporter: string | null;
  setTransporter: React.Dispatch<React.SetStateAction<string | null>>;
}

// Création du contexte avec le type `TransporterContextProps | undefined`
export const TransporterContext = createContext<
  TransporterContextProps | undefined
>(undefined);

interface TransporterProviderProps {
  children: ReactNode;
}

const TransporterProvider: React.FC<TransporterProviderProps> = ({
  children,
}) => {
  const [transporter, setTransporter] = useState<string | null>(
    localStorage.getItem('transporter'),
  );

  useEffect(() => {
    // Met à jour ou supprime le transporteur dans le localStorage
    if (transporter) {
      localStorage.setItem('transporter', transporter);
    } else {
      localStorage.removeItem('transporter');
    }
  }, [transporter]);

  // Définir `contextValue` avec le type explicite `TransporterContextProps`
  const contextValue: TransporterContextProps = useMemo(
    () => ({
      transporter,
      setTransporter,
    }),
    [transporter],
  );

  return (
    <TransporterContext.Provider value={contextValue}>
      {children}
    </TransporterContext.Provider>
  );
};

export default TransporterProvider;

But I've got this error : The namespace 'TransporterContext' could not be found.ts(2503) namespace error

for this line :

    <TransporterContext.Provider value={contextValue}>
      {children}
    </TransporterContext.Provider>

Due to this error, I cannot import my provider in my App.tsx

Can someone help me pls ??

Tk

4
  • Is your source file use .tsx as extension? Commented Nov 4, 2024 at 8:48
  • no just .ts but I tried .tsx and that doesn't work either Commented Nov 4, 2024 at 10:55
  • Use .tsx or It never works. For errors after switch to .tsx, it's different issues. Commented Nov 5, 2024 at 1:56
  • ty it works @Jerryh001 Commented Nov 5, 2024 at 8:48

1 Answer 1

0

Usage is wrong here since you are only exporting TransporterContext definition. Please correct the usage to below.

 <TransporterProvider value={contextValue}>
      {children}
  </TransporterProvider>
Sign up to request clarification or add additional context in comments.

1 Comment

i've got this error now : Parsing error: '>' expected.eslint 'TransporterProvider' refers to a value, but it is used here as a type. Did you mean to use 'typeof TransporterProvider'?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.