React defaultValue 导致过滤函数的行为与预期不同
React defaultValue is causing the filtering function act different than expected
我有一个可编辑输入的列表,但是当我过滤掉 useState
数组中的一项时,它仅在我使用 value
属性,这是不可编辑的,而不是 defaultValue
属性,这会导致删除数组的最后一项(而不是单击的那一项)。
有没有办法在保持输入可编辑的同时删除右边?
这是一个示例 Fiddle: https://jsfiddle.net/MatanCL/25hLyj6a/1
我的代码:
function App () {
let [myAray1, setMyArray1] = React.useState(['cat', 'dog', 'fish']);
let [myAray2, setMyArray2] = React.useState(['cat', 'dog', 'fish']);
return (
<div>
Working, but input is uneditable:
{myAray1.map(animal => <div>
<input value={animal}/>
<button onClick={() => {
const me = animal;
setMyArray1(myAray = myAray1.filter(animal => animal !== me));
}}>
remove
</button>
</div>)}
<br/>
Removes the wrong one:
{myAray2.map(animal => <div>
<input defaultValue={animal}/>
<button onClick={() => {
const me = animal;
setMyArray2(myAray2 = myAray2.filter(animal => animal !== me));
}}>
remove
</button>
</div>)}
</div>
)
}
谢谢大家!
您应该将 key
添加到您的输入中。喜欢:
{myAray2.map(animal =>
<div>
<input defaultValue={animal} key={animal} />
...
</div>)
}
这样做的原因是为了显式地告诉 React 键。更多信息请阅读the official document。
<input>
不可编辑,因为设置值 属性 使其成为 受控组件
您需要向输入添加 onChange
事件以使其可编辑。
为确保您在使用过滤器时没有删除错误的元素,请使用“Key”来过滤正确的项目。
删除错误的:
{myAray2.map(animal => <div>
<input value={animal} key={animal} onChange={handleOnChange}/>
<button onClick={() => {
const me = animal;
setMyArray2(myAray = myAray2.filter(animal => animal !== me));
}}>
remove
</button>
<div />)}
我有一个可编辑输入的列表,但是当我过滤掉 useState
数组中的一项时,它仅在我使用 value
属性,这是不可编辑的,而不是 defaultValue
属性,这会导致删除数组的最后一项(而不是单击的那一项)。
有没有办法在保持输入可编辑的同时删除右边?
这是一个示例 Fiddle: https://jsfiddle.net/MatanCL/25hLyj6a/1
我的代码:
function App () {
let [myAray1, setMyArray1] = React.useState(['cat', 'dog', 'fish']);
let [myAray2, setMyArray2] = React.useState(['cat', 'dog', 'fish']);
return (
<div>
Working, but input is uneditable:
{myAray1.map(animal => <div>
<input value={animal}/>
<button onClick={() => {
const me = animal;
setMyArray1(myAray = myAray1.filter(animal => animal !== me));
}}>
remove
</button>
</div>)}
<br/>
Removes the wrong one:
{myAray2.map(animal => <div>
<input defaultValue={animal}/>
<button onClick={() => {
const me = animal;
setMyArray2(myAray2 = myAray2.filter(animal => animal !== me));
}}>
remove
</button>
</div>)}
</div>
)
}
谢谢大家!
您应该将 key
添加到您的输入中。喜欢:
{myAray2.map(animal =>
<div>
<input defaultValue={animal} key={animal} />
...
</div>)
}
这样做的原因是为了显式地告诉 React 键。更多信息请阅读the official document。
<input>
不可编辑,因为设置值 属性 使其成为 受控组件
您需要向输入添加 onChange
事件以使其可编辑。
为确保您在使用过滤器时没有删除错误的元素,请使用“Key”来过滤正确的项目。
删除错误的:
{myAray2.map(animal => <div>
<input value={animal} key={animal} onChange={handleOnChange}/>
<button onClick={() => {
const me = animal;
setMyArray2(myAray = myAray2.filter(animal => animal !== me));
}}>
remove
</button>
<div />)}