我正在尝试编辑一些现有数据,为此我需要在输入字段中显示现有值,然后我需要更新字段值。但如果我尝试删除输入字段的值,它不会对输入字段产生任何影响,但如果我正在打印 onChange 事件响应,它只会命中,但值不会改变。但我需要改变的值。否则我无法更新状态,因此不会执行编辑。请帮忙。
代码如下:
import React, { useEffect, useState } from 'react'
import { Form,Button } from 'react-bootstrap';
const EditData = () => {
let [old,setOld]=useState({
id:"ab123",bookname:"Book1",author:"John Doe",price:"1,234"
})
let changeHandler=(event)=>{
let {value,name}=event.target;
console.log(name,value);
}
let submitHandler=(event)=>{
event.preventDefault();
console.log("submitted");
}
return (
<div>
<Form onSubmit={submitHandler}>
<Form.Group className="mb-3" controlId="booksname">
<Form.Label>Name</Form.Label>
<Form.Control type="text" name="bookname" value={old.bookname} onChange={changeHandler} />
</Form.Group>
<Form.Group className="mb-3" controlId="booksauthor">
<Form.Label>Author</Form.Label>
<Form.Control type="text" name="author" value={old.author} onChange={changeHandler}/>
</Form.Group>
<Form.Group className="mb-3" controlId="booksprice">
<Form.Label>Price</Form.Label>
<Form.Control type="text" name="price" value={old.price} onChange={changeHandler}/>
</Form.Group>
<Button variant="outline-dark" type="submit">
Submit
</Button>
</Form>
</div>
)
}
export default EditData
如果我尝试修改任何字段的值,则第一个字符会发生变化,但其他字符不会。例如:我将值 John Doe 作为作者姓名,我单击该值,然后尝试删除姓氏,然后输入字段中不会发生任何变化,只有 changehandler 显示在控制台中:(
3 author John Do
是的,只有 e 被删除,3 代表打印该消息的次数)
对于受控输入,改变的值将按字符收集到相应的状态中。以下代码执行此操作。
更多信息:
优化每次击键时的重新渲染
推迟部分 UI 的重新渲染
示例代码 - 完整列表
请参阅下面附上的测试运行结果,然后尝试下面的代码。看看是否可以删除和更新字段值。该代码与您的原始代码非常相似。唯一应用的更改是在 changeHandler 中。
onChange 事件是按字符触发的,这是本例中要注意的最重要的一点,其余的代码需要进行相应的对齐。
这种基于字符的输入适用于删除和编辑。
例如,逐个删除字段名称中的字符串“book1”。
“Book1” - 通过删除尾随字符“1”,onChange 中收到的新值将为“book”。此值需要立即更新为 old 状态。这也会同步输入中的值,以便状态和输入将是相同的值“Book”。
“Book”-删除“k”-将与“Boo”同步状态和值。
“Boo”——删除“o”——将与“Bo”同步状态和值。
“Bo”——删除“o”——将与“B”同步状态和值。
“B”——删除“B”——将与“”同步状态和值。
现在状态已经连同视觉显示一起变为空了。
另一个例子,如果我们通过选择一次性删除整个字符串“Book1”,则事件中的改变值将为“”,这将立即设置为状态,以便输入值也将设置为“”。
请发表评论以获得进一步的帮助。
App.js
测试结果
“Book1” 编辑为“Boo”
Author 列值全部删除