Javascript React上下文API与路由器

Javascript React上下文API与路由器,javascript,reactjs,Javascript,Reactjs,我试图将上下文API用于React路由器,但它并没有像我预期的那样工作 这是我的Container.js文件 从“React”导入React 从“react router dom”导入{Route,Switch}; 从“./Components/Home/Home”导入主页; 从“./Components/Create/Create”导入创建; 从“./Components/Login/Login”导入登录名; 从“./Context/googleIdContext”导入{GoogleIdCo

我试图将上下文API用于React路由器,但它并没有像我预期的那样工作

这是我的Container.js文件

从“React”导入React
从“react router dom”导入{Route,Switch};
从“./Components/Home/Home”导入主页;
从“./Components/Create/Create”导入创建;
从“./Components/Login/Login”导入登录名;
从“./Context/googleIdContext”导入{GoogleIdContextProvider};
常量容器=()=>{
返回(
)
}

导出默认容器使用路由器时,必须使用包含交换机和路由的路由器结构


使用路由器时,必须使用包含交换机和路由的路由器结构


您需要了解react路由器dom的工作原理:

我想错误在第四步。结果取决于您如何访问localhost:3000/home

  • 如果您注册并将“jeong”放入上下文中,然后转到带有history.push(“/home”)的“/home”,它将按照您的预期正常工作
  • 但如果您只需键入url localhost:3000/home,您将获得您现在拥有的内容
  • 区别在于(1)中有导航时刻的上下文,但(2)中的上下文不仅仅存在:

    要解决此问题,您必须在根组件中检查用户是否已注册,并将其数据放入您的上下文中,例如:

    useEffect(() => {
    const data = checkRegistration();
    if (data.registered) {
      setContext(data.userName)
    }}, []);
    

    您需要了解react路由器dom的工作原理:

    我想错误在第四步。结果取决于您如何访问localhost:3000/home

  • 如果您注册并将“jeong”放入上下文中,然后转到带有history.push(“/home”)的“/home”,它将按照您的预期正常工作
  • 但如果您只需键入url localhost:3000/home,您将获得您现在拥有的内容
  • 区别在于(1)中有导航时刻的上下文,但(2)中的上下文不仅仅存在:

    要解决此问题,您必须在根组件中检查用户是否已注册,并将其数据放入您的上下文中,例如:

    useEffect(() => {
    const data = checkRegistration();
    if (data.registered) {
      setContext(data.userName)
    }}, []);
    

    我在index.js文件中导入了BrowserRouter。我在index.js文件中导入了BrowserRouter。