【发布时间】:2021-09-27 13:43:17
【问题描述】:
当我在选择框中选择一个 ID 时,我想在名称数组的选定 ID 中放置一个新名称。我使用了 useState 和 useRef,但“拼接”不起作用。我不知道如何将选定的 ID 传递给拼接函数。这对我来说太难了。请帮帮我。
import React, { useRef, useState } from 'react';
const App = ()=>{
const [names, setNames] = useState([
{id: 1, text: 'aaa'},
{id: 2, text: '222'},
{id: 3, text: 'bbb'},
]);
const [inputText, setInputText] = useState('');
const [nextId, setNextId] = useState(4);
const onChange = e => setInputText(e.target.value);
const inputEl = useRef(null);
const optionId = useRef(null);
const onClick = () => {
const nextNames = names.concat({
id: nextId,
text: inputText,
});
setNextId(nextId + 1);
setNames(nextNames);
setInputText('');
console.log(inputEl.current);
console.log(optionId.current);
};
const onSelect = id => {
const nextNames = names.splice(id, 0, {id:id, text: inputText});
setNames(nextNames);
setInputText('');
}
const onRemove = id => {
const nextNames = names.filter(name => name.id !== id);
setNames(nextNames);
};
const nameList = names.map(name => (
<li key={name.id} onDoubleClick={()=> onRemove(name.id)}>{name.text}</li>
));
const idOption = names.map((name, index)=>(
<option key={name.id}>{index}</option>
));
return(
<div>
<input value={inputText} onChange={onChange} ref={inputEl}/>
<button onClick={onClick}>추가</button>
<select ref={optionId} onSelect={onSelect}>
<option>ID</option>
{idOption}
<option>last</option>
</select>
<ul>{nameList}</ul>
</div>
);
};
【问题讨论】:
-
splice获取索引,但您传递的是id。您是要向数组中添加新元素,还是要尝试更新现有元素?或两者兼有,视情况而定? -
我都想要。添加新元素有效,但更新无效。例如,我的代码中有名称 array=['aaa', '222', 'bbb']。当我想用 id:2 输入一个新名称时,它应该被替换。这就是我想要的。
标签: reactjs react-hooks splice