javascript - 反应钩子不保存数据
问题描述
我一直在尝试学习 React 钩子以开始构建个人项目,但遇到了一些障碍。目前,当我执行 axios 请求时,页面会重置并且不显示任何数据。
为了确保它以正确的方式工作,我制作了一个类版本,并且能够检索数据并将其上传到使用 setState 的状态。
import React, { useState } from "react";
import axios from "axios";
const Form = () => {
const [signup, setForm] = useState({ username: "", email: "", password: "" });
const [user, setUser] = useState({ user: "" });
const submit = () => {
axios.get("/api/users").then(user => {
setUser({ user });
});
};
return (
<div>
{user.username}
<h1>This is the Landing Page!</h1>
<form onSubmit={submit}>
<input
type="text"
placeholder="Enter Username"
value={signup.username}
onChange={e => setForm({ ...signup, username: e.target.value })}
/>
<input
type="text"
placeholder="Enter Email"
value={signup.email}
onChange={e => setForm({ ...signup, email: e.target.value })}
/>
<input
type="password"
placeholder="Enter Your Password"
value={signup.password}
onChange={e => setForm({ ...signup, password: e.target.value })}
/>
<input type="submit" value="Submit" />
</form>
</div>
);
};
类选项有效
class Form extends React.Component {
constructor(props) {
super(props);
this.state = {
user: ""
};
}
loadData = () => {
console.log(this.state);
axios.get("/api/users").then(user => {
console.log(user.data);
debugger;
this.setState({ user });
});
};
render() {
return (
<div>
<h1>This is the header</h1>
<button onClick={this.loadData}>This is a button</button>
</div>
);
}
}
我期望的是数据能够持续存在。它确实出现在 console.log 中,但即使它在几秒钟内消失,就好像整个页面不断重新加载一样。当我输入输入时,它可以工作,但不能在 axios 调用上。
解决方案
将您的 onSubmit 函数更改为以下内容以避免页面重新加载。
const submit = (e) => {
e.preventDefault();
axios.get("/api/users").then(user => {
setUser({ user });
});
};
推荐阅读
- eclipse - 通过 Xtext 使用 Sirius 建模的教程
- javascript - 间隔后如何出现console.log或提示
- android - Volley 中的 API 问题
- ruby-on-rails - 表单对象创建规则
- python - “-: 'int' 和 'tuple' 不支持的操作数类型”是什么意思?
- python-3.x - Python 脚本检查是否安装了 pip、python 和 adb,如果没有安装它
- r - 如何使用 R 找到 cos(x + b) = a 的最小正解
- android - 如何使用 Kotlin 在函数中应用多个泛型
- regex - 用于替换部分字符串的正则表达式,包括单引号 (')
- javascript - 如何为 IE 正确使用 onchange 元素