为什么 onClick on input type=submit 会自动改回我设置的状态?
Why does onClick on input type=submit in a Form automatically change back the state I set?
我正在尝试做一个简单的“通过上传银行转帐图片验证您的付款”。
我创建了一个“isSent”状态,以及一个将“isSent”从 false 变为 true 的函数。
如果为真,我希望文本显示为“您已提交验证”。
到目前为止它“有效”。问题是,当我点击input:submit时,大约1秒后才显示“您已提交验证”,然后又将“isSent”变为false。
谁能给我解释一下这是怎么回事?谢谢,这是我的代码:
import React, { useState } from "react";
function PaymentVerification() {
const [isSent, setisSent] = useState(false);
const verificationSent = () => {
setisSent(true);
};
return (
<div>
<p>Payment Verification</p>
<form action=''>
<label htmlFor=''>Please uploal your image</label>
<input
type='file'
name='imageVerification'
id='imageVerification'
accept='image/*'
/>
<br />
<input
type='submit'
value='Send for verification'
onClick={() => verificationSent()}
/>
</form>
{isSent ? (
<p>you have submitted your verification</p>
) : (
<p>you havent uploaded yet</p>
)}
</div>
);
}
export default PaymentVerification;
您的代码确实没有问题,但浏览器在单击“提交”按钮时应用的默认行为。
默认情况下,当您单击此按钮时,整个页面会重新加载。这就是它按您描述的方式运行的原因:您期望的消息会出现一段时间,但是然后重新加载整个页面。因此,所有组件都返回到它们的初始状态。
您可以通过使用传递给事件处理程序的 event
参数的 preventDefault
方法来解决此问题,以防止浏览器执行其默认行为并避免页面重新加载。
onClick={(e) => {
e.preventDefault();
verificationSent();
}}
我正在尝试做一个简单的“通过上传银行转帐图片验证您的付款”。 我创建了一个“isSent”状态,以及一个将“isSent”从 false 变为 true 的函数。
如果为真,我希望文本显示为“您已提交验证”。 到目前为止它“有效”。问题是,当我点击input:submit时,大约1秒后才显示“您已提交验证”,然后又将“isSent”变为false。
谁能给我解释一下这是怎么回事?谢谢,这是我的代码:
import React, { useState } from "react";
function PaymentVerification() {
const [isSent, setisSent] = useState(false);
const verificationSent = () => {
setisSent(true);
};
return (
<div>
<p>Payment Verification</p>
<form action=''>
<label htmlFor=''>Please uploal your image</label>
<input
type='file'
name='imageVerification'
id='imageVerification'
accept='image/*'
/>
<br />
<input
type='submit'
value='Send for verification'
onClick={() => verificationSent()}
/>
</form>
{isSent ? (
<p>you have submitted your verification</p>
) : (
<p>you havent uploaded yet</p>
)}
</div>
);
}
export default PaymentVerification;
您的代码确实没有问题,但浏览器在单击“提交”按钮时应用的默认行为。
默认情况下,当您单击此按钮时,整个页面会重新加载。这就是它按您描述的方式运行的原因:您期望的消息会出现一段时间,但是然后重新加载整个页面。因此,所有组件都返回到它们的初始状态。
您可以通过使用传递给事件处理程序的 event
参数的 preventDefault
方法来解决此问题,以防止浏览器执行其默认行为并避免页面重新加载。
onClick={(e) => {
e.preventDefault();
verificationSent();
}}