Búsqueda de sitios web

reactjs - ¿Cómo usar los Contextos de React con Hooks?


En mi aplicación, estoy intentando usar los Contextos de React con setState.

const userContext = React.createContext([{ user: {} }, () => {}]);
const userHook = useState({ user: {} });

<userContext.Provider value={userHook}>
// some other code here
</userContext.Provider>

Sin embargo, estoy recibiendo este error en mi linter:

.

¿Alguien podría indicarme la dirección correcta?

Además, cuando intento usar React.createContext() como en muchos tutoriales, por ejemplo:

const ThemeContext = createContext(["green", () => {}]);

Recibo otro error del linter sobre una función flecha vacía inesperada. ¿Cómo puedo solucionar eso?

Respuesta #1

Necesitas corregir los tipos del contexto que estás creando:

import { Dispatch, SetStateAction } from "react";

const userContext = createContext<
  [{ user: {} }, Dispatch<SetStateAction<{ user: {} }>>]
>([{ user: {} }, () => {}]);

Ahora, no verás ningún error de tipo al proporcionarlo usando:

const userHook = useState({ user: {} });
// ...
<userContext.Provider value={userHook}>
  <Foo />
</userContext.Provider>

Recuerda que userHook será un arreglo que puedes desestructurar como:

function Foo() {
  const userHook = useContext(userContext);
  const [user, setUser] = userHook // Here, destructuring the array
  return <h1>Foo</h1>;
}

Respuesta #2

const userHook=useState({ user: {} }); está mal. useState devuelve [state, setState]. Intenta cambiar la implementación.

const [state, setState] = useState({ user: {} });

<userContext.Provider value={state}>
// some other code here
</userContext.Provider>