javascript 状态值正在更新,但无法呈现 Jmeter 板页面

gijlo24d  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(83)

我正在使用React.js开发登录表单。一旦用户输入了正确的凭据,它就应该导航到 Jmeter 板页面。下面是我的登录组件。

import React, { useState } from "react";
import { Link } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import './login.css';
import { redirect } from "react-router-dom";
const LoginForm = () => {
    document.body.style = 'background:#20c997';
    const [email, setEmail] = useState("");
    const [password, setPassword] = useState("");
    localStorage.setItem("authenticated",false);
    const navigate = useNavigate();
    const permEmail = "piyush@gmail.com";
    const permPass = "pass";

    const handleEmail = (e) => {
        setEmail(e.target.value);
    }
    const handlePassword = (e) => {
        setPassword(e.target.value);
    }

    const handleSubmit = (e)=>{
        e.preventDefault();
        console.log(localStorage.getItem("authenticated"));
        if(email===permEmail && password===permPass){
            localStorage.setItem("authenticated",true);
            navigate("/dashboard");
        }else{
            window.alert("Wrong credentials");
        }
    }
    return (
        <>
            <div className="p-5">
                <div className="container text-start w-25 bg-light text-dark h-50 p-5 border border-primary border-2 rounded">
                    <form>
                        <div className="mb-3">
                            <label for="exampleFormControlInput1" className="form-label">Email address</label>
                            <input
                                type="email"
                                className="form-control border border-primary border-1"
                                id="exampleFormControlInput1"
                                placeholder="name@example.com"
                                onChange={(e) => handleEmail(e)}
                            />
                        </div>
                        <div className="mb-3">
                            <label htmlFor="exampleFormControlInput2" className="form-label">Password</label>
                            <input
                                type="password"
                                className="form-control border border-primary border-1"
                                id="exampleFormControlInput2"
                                placeholder="password"
                                onChange={(e) => handlePassword(e)}
                            />
                        </div>
                        <button 
                        type="submit" 
                        className="btn btn-outline-primary border-1 mt-2"
                        onClick={e=>handleSubmit(e)}
                        >Submit</button>
                    </form>

                </div>
            </div>
        </>

    )
}

export default LoginForm;

字符串
在上面的代码中,我使用localStorage来更新密钥。以下是 Jmeter 板组件代码:

import React, { useState, useEffect } from "react";
import { Navigate } from "react-router-dom";

const Dashboard = () => {
    document.body.style = 'background:white';
    const [authenticated, setAuthenticated] = useState(null);
    useEffect(() => {
        setData();
    }, [])
    function setData() {
        const loggedInUser = localStorage.getItem("authenticated");
        console.log(loggedInUser);
        setAuthenticated(loggedInUser);
        console.log(authenticated);
    }
    console.log(authenticated);
    if (!authenticated) {
        return <Navigate replace to="/login" />;
    }
    else {
        return (
            <>
                <h1>Hello world</h1>
            </>
        );
    }
}

export default Dashboard;


在上面的 Jmeter 板代码中,我正在检查localStorage中的身份验证密钥是否为true,如果是,则应该返回新的HTML代码'' Hello World',如果不是,则应该重定向到登录页面。但是,即使经过身份验证的密钥是真的,我也无法获得“Hello World” Jmeter 板。我被困在这里了请帮我拿这个。

pgx2nnw8

pgx2nnw81#

function MyComponent() {
  useEffect(() => {
    // Code here will run after *every* render
  });
  return <div />;
}

字符串
由于useEffect将在渲染后运行,因此在第一次渲染时,它将“authenticate”设置为false,并将您导航回登录页面。
一个更好的方法是这样的:
https://codesandbox.io/s/sharp-tdd-y6zc8q?file=/src/LoginForm.js
在这里,我们将初始状态设置为localStorage中的任何内容,因为在useEffect之后设置状态是有问题的,因为我们在渲染之后这样做,这会将我们导航回login,并且不会有更多的/dashboard代码运行或渲染。

相关问题