简体   繁体   English

我正在尝试 history.push 但它在反应时总是未定义

[英]I am trying to history.push but its always undefined on react

I am trying to history.push but its always undefined.我正在尝试 history.push 但它始终未定义。

import React, { useEffect, useState } from "react";
import * as Firebase from "firebase/app";
import "firebase/auth";
import DBAPI from "./database/database-api"
import DBName from "./database/database-name"
import { useHistory } from "react-router-dom";

export const UserContext = React.createContext();

export const UserProvider = ({ children }) => {
  const [currentUser, setCurrentUser] = useState(null);
  const [isAdmin, setIsAdmin] = useState(null);
  const [isVendor, setIsVendor] = useState(null);
  const [pending, setPending] = useState(true);

  let history = useHistory();

  useEffect(() => {
    Firebase.auth().onAuthStateChanged(async (user) => {
        if (user != null) {
            setCurrentUser(user)

            let response = await Promise.all([
              DBAPI.checkUserExist(DBName.admin, user.uid),
              DBAPI.checkUserExist(DBName.vendor, user.uid)
            ]);

            console.log(response[0].data)
            console.log(response[1].data)

            if (response[0].data) setIsAdmin(true)  // admin
            if (response[1].data) setIsVendor(true) // vendor

            history.push(`${process.env.PUBLIC_URL}/products`)
        } else {
            setIsVendor(false)
            setIsAdmin(false)
        }

        setPending(false)
    });
  }, []);

  if(pending){
    return <>Loading...</>
  }

  return (
    <UserContext.Provider
      value={{
        currentUser,
        isAdmin,
        isVendor
      }}
    >
      {children}
    </UserContext.Provider>
  );
};

The code looks ok.代码看起来没问题。 Just make sure your component is wrapped in a <Router> context.只需确保您的组件包装在<Router>上下文中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM