javascript - 如何防止useState和useLocation在react js的输入/文本字段中重新呈现?
问题描述
所以基本上我的问题是我有两个页面/屏幕(主要和编辑)。在页面中,当我单击一个项目时,它会使用包中的挂钩Main
将其传递到Edit
页面。在页面中,我使用钩子获取项目并将它们传递给我的初始输入字段,但是每次我编辑/键入一个字符时都不确定它是否被称为重新渲染或其他任何东西,但将在控制台中传递。这是我的代码:useHistory
react-router-dom
Edit
useLocation
useState
text field
useLocation
编辑页面/屏幕
import axios from "axios";
import React, { useState } from "react";
import { useLocation } from "react-router";
export const EditScreen = () => {
const location = useLocation().state;
console.log(location);
const [title, setTitle] = useState(location.b_title);
const [content, setContent] = useState(location.b_content);
const [category, setCategory] = useState(location.category_id);
const submitHandler = (e) => {
e.preventDefault();
axios
.put(`http://localhost:3001/api/v1/blog/${location.id}`, {
blog_title: title,
blog_content: content,
category_id: category,
})
.then(alert("success edit blog"))
.catch((err) => alert(err));
setTitle("");
setContent("");
setCategory("");
};
return (
<div>
<h1>edit blog page</h1>
<form onSubmit={submitHandler}>
<input
type="text"
placeholder="title"
value={title}
onChange={(e) => setTitle(e.target.value)}
/>
<br />
<br />
<input
type="text"
placeholder="content"
value={content}
onChange={(e) => setContent(e.target.value)}
/>
<br />
<br />
<input
type="text"
placeholder="category"
value={category}
onChange={(e) => setCategory(e.target.value)}
/>
<br />
<br />
<input
type="submit"
value="submit"
disabled={
title === "" || content === "" || category === "" ? true : false
}
/>
</form>
</div>
);
};
控制台屏幕截图
您可以在红色圆圈中看到上面的 ss,这就是问题所在。
解决方案
兄弟,我们不能阻止 setState 重新渲染组件,因为它是之前指定的默认默认值。因此,您必须使用去抖动技术来防止发生多次重新渲染去做。文章中通过示例清楚地提到了它。您还可以将事件更改为 onBlur 而不是 onChange 我们减少了调用 setStates 的数量并且我们减少了重新渲染。
推荐阅读
- python - 如何在 tkinter 中创建一个条目 int
- google-chrome - 打开单个 Chrome 选项卡会导致多个远程连接
- bash - UNIX:条件检查导致意外结果
- json - 使用 CLI 从 Windows 系统中的 AWS S3 存储桶将 JSON 文件复制到本地
- python - 适用于 Apple 环境的 Python 脚本
- autocomplete - 如何使用 Gmail API 在我的项目中实现 Gmail 智能撰写功能?
- python - 表单提交后页面不重定向
- c++ - 结构成员可以保存为变量吗?
- android - 为什么录制视频需要RECORD_AUDIO权限
- java - 显示每个完美数字的程序