我try 使用上下文Api来保存来自Firebase API的用户数据,但当我在组件索引中获得这些值​​时,它总是返回错误: TypeError:对象不可迭代(无法读取属性符号(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 }}>

因此,您不能将其分解为array.请改用const { userLogin, setUserLogin } = useContext(Context):

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

Reactjs相关问答推荐

条件索引路由

如何使用next.js以DOM为目标在映射中使用Ref

滚动事件监听器在Next.js客户端组件中不触发

react 下拉菜单任务

Reaction Axios多部分/表单-数据数组不工作

ReactJs;Reaction-Hook-Form:仅当 Select 了特定 Select 列表选项时才显示文本输入

如何使我的代码可以接受我想要的每一个链接

使用VITE的Reaction应用程序的配置是否正确?

根据用户 Select 的注册类型更改表单字段

将 useRef 与 useImperativeHandle 一起使用时,React 不会重新渲染

运行 npm run build 出现问题

React CSSTransition 两次创建新页面并在这两个相同的页面上运行转换

React Native - 身份验证 - 触发值以更改 Auth 和 UnAuth 堆栈导航器

如何将我的 ID 值传递给下一个组件?

在 Formik 表单中访问子组件的值

Cypress - 替换 React 项目中的变量

设置 Material UI 表格默认排序

哪个 PrivateRouter 实现更好:高阶组件还是替换?

Select MenuItem 时 Material-ui 不更改样式

a.active 类在导入 x.scss 文件时有效,但在使用 x.module.scss 时无效