javascript - 为什么我的 POST 请求会导致完全重新渲染?
问题描述
我是新来的,在向 Firebase 发送帖子请求时会有一些非常奇怪的行为,希望有人能解释一下。我有一个包含两个必需文本区域的表单,它们都将各自的状态键设置为它们的输入值 onChange。然后,我有一个使用 axios 实例连接到 POST 函数的按钮。
如果没有,或者只有一个文本区域有输入,则请求绝对可以通过。
如果两个文本区域都输入了请求,则不会发生请求,而是我会完全重新渲染/刷新页面。我已经尝试以多种方式切割代码,向 POST 函数添加条件来更改/测试实例以查看我是否遗漏了某些内容,但似乎没有任何效果。当唯一的变化是第二个输入值时,我无法理解是什么导致了重新渲染和停止请求。任何帮助表示赞赏!
这是我的代码:
class NewPostForm extends Component {
state = {
title: "",
offer: "",
return: "",
};
postHandler = () => {
const post = {
title: this.state.title,
offer: this.state.offer,
return: this.state.return,
};
instance
.post("/posts.json/", post)
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
}
};
render() {
return (
<form>
<textarea
key={"in0"}
value={this.state.offer}
onChange={(event) => this.setState({ offer: event.target.value })}
required
/>
<textarea
key={"in1"}
value={this.state.return}
onChange={(event) => this.setState({ return: event.target.value })}
required
/>
<div style={{ display: "flex", alignItems: "center" }}>
<MainButton click={this.postHandler} label={"Post"} />
<MainButton click={this.props.click} label={"Cancel"} />
</div>
</form>)
主按钮定义:
const MainButton = (props) => {
return (
<button onClick={props.click} style={style}> {props.label} </button>
);
};
解决方案
表单中的按钮或提交输入可以触发表单被“提交”到目标,这在经典的 HTML 方式中意味着将输入发送回服务器,然后将服务器返回的内容加载到新文档中。如果您在表单按钮单击时执行 fetch/axios/XHR/whatever,则需要通过事件对象阻止默认行为。将您的 onClick 处理程序更改为:
postHandler = e => {
e.preventDefault();
// rest of the code
};
推荐阅读
- python - 如何从熊猫中的时间列创建特定的时间桶
- python - 新 python 库的想法 - yamldict
- c# - DEP0700:DEP0700:应用程序注册失败。[0x80073CFB] Un autre utilisateur a déjà installé une version décompressée de l'application
- python - 将多个 xlsx 文件合并为一个
- ruby - Ruby 倒计时循环学习实验室
- azure - 创建 Microsoft Azure SQL 数据库会同时创建 SQL Server 和 SQL 数据库资源
- python - 用户输入的 Python 方程
- c# - SFSafariViewController 和 ChromeCustomTabs 内的 Xamarin.UITest 查询元素
- spring - WebMvcConfigurationSupport 在 SpringBoot 中产生错误
- visual-studio-code - 在 Visual Studio Code 的源代码管理中查看嵌套存储库的更改