在这段代码中,我将isLoggedIn设置为.

登录.js

`个个

import axios from 'axios'
import React, { useState } from 'react'
import {  NavLink,useNavigate } from 'react-router-dom'
export default function LoginPage() {
  const [username,setUsername]=useState("")
  const [password,setPassword]=useState("")
  const [isLoggedIn, setIsLogged] = useState(false)
 
  const navigate = useNavigate();
  function checkInformations(){
    axios.post("/api/auth/login",{
      username :username,
      password:password
    })
    .then(response=>{
      if(response.status===200){
        setIsLogged(true)
        console.log("Success")
        navigate("/")
      }
      
    })
    .catch(error=>{
      console.error("Request error: ",error)
      setWarning(true)
    });

  }

  function handleLoginClick(e){
    e.preventDefault();
    checkInformations()
    
  }


  return (
    <div className="grid min-h-screen place-items-center  font-body ">
           
            ...
                    <button onClick={handleLoginClick}   type="submit" >
                        Login
                    </button>

            ...           
                </form>
            </div>
        </div>
  )
}

`个个

App.js

我首先将其设置为FALSE,然后在login.js中,如果登录成功,则将其设置为TRUE.

export default function App() {
  const [isLoggedIn, setIsLogged] = useState(false);

  return (
    <div >
      <Navbar isLoggedIn={isLoggedIn} /> 
      <Routes>
        <Route path="/login" element={<LoginPage setIsLogged={setIsLogged} />} /> 
      </Routes>
    </div>
  );
}

导出默认函数导航栏(Props){const isLoggedIn=pros.isLoggedIn;

这就是我最终得到props 的方法.但isLoggedIn的props 不可能是真的

推荐答案

您似乎已经正确地在顶层(App.js)上初始化了isLoggedIn useState,并将其传递给了登录.js

然而,问题是您不是使用从App.js传递的setIsLogging,而是在登录.js上重新初始化它

因此,基本上在您的代码中,您正在更新登录.js中不正确的useState

修复后的代码应如下所示:

App.js(无需更改)

export default function App() {
  const [isLoggedIn, setIsLogged] = useState(false);

  return (
    <div >
      <Navbar isLoggedIn={isLoggedIn} /> 
      <Routes>
        <Route path="/login" element={<LoginPage setIsLogged={setIsLogged} />} /> 
      </Routes>
    </div>
  );
}

登录.js

import axios from 'axios'
import React, { useState } from 'react'
import {  NavLink,useNavigate } from 'react-router-dom'
export default function LoginPage(props) {
  const [username,setUsername]=useState("")
  const [password,setPassword]=useState("")
 
  const navigate = useNavigate();
  function checkInformations(){
    axios.post("/api/auth/login",{
      username :username,
      password:password
    })
    .then(response=>{
      if(response.status===200){
        props.setIsLogged(true)
        console.log("Success")
        navigate("/")
      }
      
    })
    .catch(error=>{
      console.error("Request error: ",error)
      setWarning(true)
    });

  }

  function handleLoginClick(e){
    e.preventDefault();
    checkInformations()
    
  }


  return (
    <div className="grid min-h-screen place-items-center  font-body ">
           
            ...
                    <button onClick={handleLoginClick}   type="submit" >
                        Login
                    </button>

            ...           
                </form>
            </div>
        </div>
  )
}

Reactjs相关问答推荐

如何通过回调函数获取多个值?

useCallback()是否应该用于作为prop传递给子组件的函数,即使该组件包装在memo()中?

带有样式的工具提示导致无法向功能组件提供参考警告

useRef()的钩子调用无效

有没有办法在 React Router v6 中的路由匹配上运行一些逻辑/功能?

Material-UI 和 React Hook 表单不记录值

警告:遇到两个子元素拥有同一把 keys .键应该是唯一的,以便组件在更新时保持其身份

ReactJS 共享上下文

从 redux 调用UPDATE_DATA操作时状态变得未定义

在 CrafterCMS Studio 中拖动字段

将外部 JavaScript 导入 React(通过文件)

如何在 React 中使用 debounce hooks

使用输入类型文本对 useState 和日期做出react

从 API 中提取映射数组后出现重复元素

如何在自定义 JSX 元素上声明属性?

设置 Material UI 表格默认排序

如何在 Reactjs 中判断受保护路由上的用户角色?

React如何在用户登录后等待当前用户数据被获取

单击三个按钮之一后如何显示特定按钮的内容?单击其中一个按钮后应隐藏所有按钮

如何在 React x 中返回组件?