reactjs - Context Api React 的问题

标签 reactjs react-hooks react-context

我尝试使用Context Api来保存来自firebase api的用户数据,但是当我在组件Index中获取这些值时,它总是返回错误: 类型错误:对象不可迭代(无法读取属性 Symbol(Symbol.iterator))

下面是我的代码

在哪里创建上下文

import React, { createContext, useState } from "react";

const Context = createContext();

function AuthProvider({children}) {

  const [userLogin, setUserLogin] = useState({});

  return (
    <Context.Provider value={{ userLogin, setUserLogin }} >
      { children }
    </Context.Provider>
  );
}

export { Context, AuthProvider }

路线文件

 <React.StrictMode>
    <BrowserRouter>
      <AuthProvider>
        <Routes>
          <Route path='/' element={<Login />} />
          <Route path='/cadastrar' element={<Register />} />
          <Route path='/recuperar-senha' element={<Recovery />} />
          <Route path='/anuncios' exact element={<Index />} />
        </Routes>
      </AuthProvider>
    </BrowserRouter>
  </React.StrictMode>

在这里我使用 firebase 数据设置上下文

    const {setUserLogin} = useContext(Context);
    
      const { register, handleSubmit, formState: { errors } } = useForm();
    
      const onSubmit = data => {
    
        const auth = getAuth();
    
        signInWithEmailAndPassword(auth, data.email, data.password)
          .then((userCredential) => {
            const user = userCredential.user;
    
            setUserLogin({user});
    
            navigate('/anuncios');
          })
          .catch((error) => {
            let erroMessage = localizeErrorMap(error.code)
    
            Toast('error', erroMessage);
          })
      };

我想将数据保存在上下文 api 中,并能够获取例如下面的组件和其他组件

import React, {useContext} from "react";

import  { Context } from '../providers/auth';


export default function Index() {

  const [user, setUserLogin] = useContext(Context);
  //console.log(user);
  return (
    <h1>Logado {user}</h1>
  )
}

我在浏览器控制台中看到,当我单击该组件时,它通知问题出在以下行:const [user, setUserLogin] = useContext(Context);

最佳答案

您的上下文值为{ userLogin, setUserLogin }:

<Context.Provider value={{ userLogin, setUserLogin }}>

所以你不能将它解构为数组。使用 const { userLogin, setUserLogin } = useContext(Context) 代替:

export default function Index() {
  const { userLogin, setUserLogin } = useContext(Context);
  console.log(userLogin);
  ...

关于reactjs - Context Api React 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73353839/

相关文章:

android - 创建一个 DateTimePicker React-Native Android?

reactjs - Redux Saga 发生错误时获取 axios Response 对象

javascript - 如何在不重新触发 useEffect 的情况下访问 useEffect 中的状态?

javascript - 用 Hooks 编写这个 React 类组件的更好方法是什么?

reactjs - 使用它来存储 JSX 组件以便在其他地方显示是滥用上下文吗?

java - React + Spring Boot上传文件和表单数据

javascript - react 中的路由问题

reactjs - 如何在 useEffect 中向 useRef 添加事件监听器

javascript - 为什么在 React js 中组件没有被渲染?

reactjs - React 16.3.*上下文提供者错误: Expected string or class/func but got: Object