Javascript 我试着推动历史,但它总是不确定的反应
我在试图推历史,但它总是不确定的Javascript 我试着推动历史,但它总是不确定的反应,javascript,reactjs,react-router-dom,Javascript,Reactjs,React Router Dom,我在试图推历史,但它总是不确定的 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 } fro
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>
);
};
import React,{useffect,useState}来自“React”;
从“Firebase/app”导入*作为Firebase;
导入“firebase/auth”;
从“/database/database api”导入DBAPI
从“/database/database name”导入数据库名
从“react router dom”导入{useHistory};
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);
让历史=使用历史();
useffect(()=>{
Firebase.auth().onAuthStateChanged(异步(用户)=>{
如果(用户!=null){
setCurrentUser(用户)
让回应=等待承诺([
DBAPI.checkUserExist(DBName.admin,user.uid),
DBAPI.checkUserExist(DBName.vendor,user.uid)
]);
console.log(响应[0]。数据)
console.log(响应[1]。数据)
if(响应[0].data)setIsAdmin(true)//admin
if(响应[1].data)setIsVendor(true)//vendor
history.push(${process.env.PUBLIC\u URL}/products`)
}否则{
setIsVendor(假)
setIsAdmin(假)
}
setPending(false)
});
}, []);
如果(待定){
返回加载。。。
}
返回(
{儿童}
);
};
代码看起来正常。只需确保组件包装在
上下文中即可