reactjs - DOM 不会在值更改时更新
问题描述
我正在尝试使用 next.js 项目使用功能组件设置一个简单的表单:
const Form = () => {
let error = false
const handleNameSubmit = (e) => {
e.preventDefault()
const name = e.target.name.value.trim()
if(!! name.length) {
error = false
} else {
error = 'Please enter your name'
}
}
return (
<>
<form onSubmit={handleNameSubmit}>
<h1>I’d like to know how to address you,
please type in your name</h1>
<input type="text" name="name" placeholder="Your name"/>
{!!error && (<p>{error}</p>)}
<button type="submit">Next</button>
</form>
</>
)
}
我正在做一些简单的验证,即检查是否在名称输入中输入了任何值,如果该字段为空,则显示错误。
但是,当我将页面加载时的错误值设置为某个值时,它会显示在 DOM 中,但如果我稍后对其进行操作,则 DOM 不会更新。我是 next.js 的新手。
解决方案
你必须使用state
变量来实现你的目标。只需转换error
状态变量即可。
const Form = () => {
const [error, setError] = useState(false);
const handleNameSubmit = (e) => {
e.preventDefault();
const name = e.target.name.value.trim();
setError(name.length ? false : 'Please enter your name');
}
return (
<>
<form onSubmit={handleNameSubmit}>
<h1>I’d like to know how to address you,
please type in your name</h1>
<input type="text" name="name" placeholder="Your name" />
<button type="submit">Next</button>
{error && <p>{error}</p>}
</form>
</>
)
}
我为你创建了一个小演示。
https://stackblitz.com/edit/react-7kat5c
希望对你有帮助!
推荐阅读
- java - Pentaho 数据集成 JSON 输出 /" 而不是 "
- mongodb - 选择合适的数据库来存储 AVRO 消息
- javascript - 如何根据条件加载外部 JavaScript
- javascript - 如何访问或将 php 变量传递给 JavaScript?
- c++ - std::array 保证零初始化?
- html - 在 HTML 和 CSS 中弹出 - 此弹出窗口中的内容消失
- php - Mysql - 如何将两列与外国连接,其中第一列> 0?
- html - 如何在桌面 Outlook 设备中赋予上标字体大小?
- asp.net-core - Entity Framework Core 复数模型名称首先在数据库中转换为单数
- node.js - 致命错误:接近堆限制的无效标记压缩分配失败 - 运行反应应用程序时 JavaScript 堆内存不足