我很欣赏这可能是基本的,因为我是新手,但我试图在更改或提交输入时非常简单地记录输入的值。
这是代码:
import React from "react";
const App = () => {
const onNameChange = (nameInput) => {
console.log("name change Fn", nameInput);
};
return (
<>
<form onSubmit={onNameChange(this.value)}>
<input value='the value' type="text" onChange={console.log(this.value)}></input>
</form>
</>
);
}
export default App
- 为什么我不能在表单内单击并更改值?
- 如何在单击内部并更改输入时记录输入的值?
- 如何在提交时记录输出的值?
谢谢。。。这是一个堆栈闪电战演示: https://stackblitz.com/edit/react-tvk69a
编辑:为什么我不能在表单内单击并更改值?
您在表单 Input 中传递硬编码值,您需要将其替换为可以在组件中控制的值。因此,您可以向状态添加一些内容以对其进行跟踪,例如:
const [value, setValue] = React.useState('')
并将其插入输入元素中:
<input value={value}...
最后,您需要处理更改,以便更新状态:
<input value={value} onChange={e => setValue(e.target.value)}
如何在单击内部并更改输入时记录输入的值?
您可以使用 onClick 和 onChange 道具并将您的处理程序传递给那里:
<button onClick={activateLasers}> Activate Lasers </button>.
<input value={value} onChange={e => setValue(e.target.value)} />
如何在提交时记录输出的值?
在标签上,您可以使用处理程序传递 onSubmit 属性,该属性将从其内部类型='submit' 触发
<form onSubmit={handleSubmit}>
在这里你可以看到一个完整的例子:
import React, { useState, useEffect } from "react";
const App = () => {
const [textV, setTextV] = useState("the value");
const onNameChange = () => {
event.preventDefault();
console.log("name change Fn", textV);
};
useEffect(() => {
console.log("Text has changed: ", textV);
}, [textV]);
return (
<form onSubmit={onNameChange}>
<input
value={textV}
type="text"
onChange={e => setTextV(e.target.value)}
/>
<button type="submit">Submit</button>
</form>
);
};
export default App;
你可以在这里玩它: https://stackblitz.com/edit/react-ky2cks?file=src/App.js
解释: 要控制文本区域值的变化,您应该使用反应状态
import React, { useState, useEffect } from "react";
const App = () => {
const [textV, setTextV] = useState("the value");
然后,您需要有一个提交按钮来调用表单上的onSubmit事件
<form onSubmit={onNameChange}>
<input
value={textV}
type="text"
onChange={e => setTextV(e.target.value)}
/>
<button type="submit">Submit</button>
</form>
在形式中,您可以看到我将输入值从"值"更改为{textV}
textV
因为这是我之前声明的状态,在 onChange 函数中,我调用状态处理程序函数来更改状态textV
的值,此函数允许我在每次输入值更改时更新状态。
要记录每次输入值更改时的状态值,可以使用 useEffect 挂钩:
useEffect(() => {
console.log("Text has changed: ", textV);
}, [textV]);