javascript - 重定向后未存储 useState 值

标签 javascript reactjs state use-state

在过去的两天里,我遇到了一些问题,我不确定我做错了什么。
我想实现一个登录页面,在登录后将用户重定向到仪表板。
因为我想在整个应用程序中使用用户名,所以我将值存储在 App.js 中。
该值被传递给 Login.js,在那里我尝试调用 setUsername 函数来更新该值,但重定向后该值再次为空。
用户名的值不应该是用 setUsername 设置的那个吗?
应用.js

const App = () => {
    const [username, setUsername] = useState(null);

    return (
        <div className="site">
            <main>
                <Switch>
                    <Route exact path={'/login'} render={() => <Login username={username} setUsername={setUsername} />} />
                    <Route exact path={'/dashboard/:username'} render={() => <Dashboard username={username} />}/>
                </Switch>
            </main>
        </div>
    );
};
登录.js
const Login = (props) => {
    let username = props.username;
    const [password, setPassword] = useState("");

    function handleSubmit(e) {
        e.preventDefault();
        axiosInstance.post('url', {
            username: username,
            password: password
        }).then(response => {
                props.setUsername(username);
             }
        ).then(() => window.location = `/dashboard/${username}`)
            .catch(error => {
             throw error;
        });
    }

    return (
        <MyForm onSubmit={handleSubmit}>
            <Form.Group controlId="formBasicUser">
                <Form.Label>Username</Form.Label>
                <Form.Control type="text" name="username" value={username} placeholder="Enter username" onChange={(e) => props.setUsername(e.target.value)}/>
            </Form.Group>

            <Form.Group controlId="formBasicPassword">
                <Form.Label>Password</Form.Label>
                <Form.Control type="password" name="password" value={password} placeholder="Password" onChange={e => setPassword(e.target.value)}/>
            </Form.Group>
            <Button variant="primary" type="submit">
                Login
            </Button>
        </MyForm>
    );
};
我也尝试在提交功能中设置用户名,但是...... nada
仪表板.js
const Dashboard = (props) => {
    return (
        <h1>Welcome {props.username}</h1>
    );
};

最佳答案

我认为重定向后用户名为空,因为您使用窗口位置,请尝试使用历史钩子(Hook)

const Login = (props) => {
let username = props.username;
let history = useHistory();
const [password, setPassword] = useState("");

function handleSubmit(e) {
    e.preventDefault();
    axiosInstance.post('url', {
        username: username,
        password: password
    }).then(response => {
            props.setUsername(username);
        }
    ).then(() => history.push(`/dashboard/${username}`))
        .catch(error => {
            throw error;
        });
}

return (
    <MyForm onSubmit={handleSubmit}>
        <Form.Group controlId="formBasicUser">
            <Form.Label>Username</Form.Label>
            <Form.Control type="text" name="username" value={username} placeholder="Enter username" onChange={(e) => props.setUsername(e.target.value)}/>
        </Form.Group>

        <Form.Group controlId="formBasicPassword">
            <Form.Label>Password</Form.Label>
            <Form.Control type="password" name="password" value={password} placeholder="Password" onChange={e => setPassword(e.target.value)}/>
        </Form.Group>
        <Button variant="primary" type="submit">
            Login
        </Button>
    </MyForm>
);};

关于javascript - 重定向后未存储 useState 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68049991/

相关文章:

javascript - 在 while 循环中等待异步方法

apache-spark - "stateful"和 "stateless"系统有什么区别?

javascript - 使用 Javascript 对象更新文档中的所有字段

reactjs - MapDispatchToProps 在父组件中导致 Typescript 错误,期望 Actions 作为 props 传递

javascript - react componentDidMount 不开火

javascript - 在 javascript(react) Web 应用程序中上传视频时的视频压缩

java - 安卓存储: OnSavedInstanceState not working?

angularjs - 通过 `params` 嵌入 View ui-router

javascript - 在 jupyter 笔记本中使用 R 的 Leaflet.minichart

javascript - 离线缓存 - html5