我是一个新的React者,我正在尝试制作一个应用程序,它从表单中获取输出并将其显示在div中。到目前为止,我只设法使用简单的useState()方法从表单中获取结果。
为了显示它,我尝试创建一个变量“isSubmitted”来跟踪变量是否被提交,以便只有在用户停止输入时才显示它!
const Example0 = () => {
var isSubmitted;
const [email, setEmail] = useState("");
const handleEmail = (event) => {
setEmail(event.target.value);
isSubmitted = false;
console.log(isSubmitted);
};
const handleSubmit = (event) => {
event.preventDefault();
isSubmitted = true;
console.log(isSubmitted);
};
return (
<Fragment>
<h1>Form example</h1>
<form onSubmit={handleSubmit}>
<div>
<label htmlFor="email">Email</label>
<input id="email" type="text" value={email} onChange={handleEmail} />
</div>
<button type="submit">Submit</button>
</form>
<div>{isSubmitted ? email : "no user"}</div>
</Fragment>
);
};
这部分,不工作。电子邮件变量改变,但显示没有。这是什么与如何React工作?我来自一个HTML背景。
<div>{isSubmitted ? email : "no user"}</div>
非常感谢帮助。
2条答案
按热度按时间w6mmgewl1#
需要呈现页,以便可以看到页中已有的数据。
在reactJS中,有状态,
状态是一个内置的React对象,用于包含有关组件的数据或信息。组件的状态可以随时间而更改;每当它改变时,组件重新呈现。source
因此,您需要使用一个状态来使组件再次呈现并查看数据。
只需创建一个新状态,如下所示:
然后在需要时更改状态,在示例中,您必须这样使用它:
3lxsmp7m2#
您应该使用状态来控制用户是否提交了电子邮件的布尔值。
每当你更新一个状态变量,组件就会重新呈现,而每次它重新呈现时,你就把
isSubmitted
标志设置为undefined,另外,即使它没有undefined,它也不会更新你的组件来显示邮件,因为非状态变量不会触发重新呈现,所以更新isSubmitted为true不会触发你的三元语句,而重新呈现它只会使其返回到undefined状态,这使得两种情况下都不会呈现div标记内容。如果您希望有条件地呈现某些内容,则应该使用
useState
,这是react的全部要点,以便相应地"React"并更新DOM。这是我看到的初学者在第一次接触React时掌握的最大问题之一。下面是我的解决方法,在您提交结束标记后,它不会将其更新为任何值(我假设您希望实现此方法):