javascript - 为什么我使用钩子的简单 React 表单不起作用?
问题描述
我现在正在学习 React Hooks 的基础知识,我想知道为什么这个特定的代码不起作用:
function Form() {
const [input, setInput] = useState('');
let result = '';
function handleSubmit(e) {
e.preventDefault();
result = input;
}
return (
<React.Fragment>
<h1>Form practice</h1>
<form>
<input type="text" onChange={(e) => setInput(e.target.value)}></input>
<button type="submit" onClick={handleSubmit}>
submit
</button>
</form>
<h2>{result}</h2>
</React.Fragment>
);
}
我只是希望在单击提交按钮时<h2>{result}</h2>
显示正在捕获的内容。input
然而,什么也没有发生。这个逻辑有什么问题?
解决方案
反应组件知道重新渲染的方式是您设置状态。更改局部变量的值不会导致重新渲染。因此,如果您希望 与<input>
分开更改<h2>
,则需要result
变成一个状态。
const [input, setInput] = useState('');
const [result, setResult] = useState('');
function handleSubmit(e) {
e.preventDefault();
setResult(input);
}
return (
<React.Fragment>
<h1>Form practice</h1>
<form>
<input type="text" onChange={(e) => setInput(e.target.value)}></input>
<button type="submit" onClick={handleSubmit}>
submit
</button>
</form>
<h2>{result}</h2>
</React.Fragment>
);
推荐阅读
- android-studio - AAPT:错误:写入 'c: ....\r.txt' 失败:数据无效。(13)
- python - 如何在 Python 中使用对象在类创建中传递参数?
- c# - 使用 Automapper 映射复杂的继承模型
- javascript - 在 google chrome 浏览器中,Web Audio API 无法正常工作
- flutter - 是否可以在底页外启用点击?
- javascript - 不切换时如何修复jQuery的切换功能?
- clang - 新行中的大括号 ( { )
- r - R包tmap:无法在线叠加点&无法在视图模式下显示点
- reactjs - 在这个 redux react 示例中,根 reducer 来自哪里,dispatch 如何知道要使用哪个 reducer?
- laravel - ErrorException:文件中的数组到字符串的转换