【发布时间】:2025-12-07 19:30:01
【问题描述】:
我想从数组中删除最后一项并重新渲染,但如果不使用过滤器,我似乎无法让它工作。但就我而言,我认为不需要过滤器,因为我总是会拿走最后一项,因此我使用 pop()
const CustomInput = (): JSX.Element => {
const [inputValue, setInputValue] = useState<string>("");
const [items, setitems] = useState<string[]>(['1', '2']);
const handleKeyDown = (e: any) => {
if (items.length && e.keyCode === 8 && inputValue === "") {
const newitems = items;
newitems.pop();
/* what is wrong here */
console.log('newitems', newitems)
setitems(newitems);
}
};
const handleChange = (e: React.SyntheticEvent<HTMLInputElement>) => {
const target = e.target as HTMLInputElement;
setInputValue(target.value);
};
return (
<div>
{items.map((oo, index) => (
<div >
<span>
{oo}
</span>
</div>
))}
<input
autoFocus
type="text"
value={inputValue}
onKeyDown={handleKeyDown}
onChange={handleChange}
/>
</div>
);
};
https://stackblitz.com/edit/react-ts-hxzcpt
怎么了?
【问题讨论】:
-
您是否尝试将 newItems 初始化为
const newitems = [...items];我认为您正在改变您的状态值导致反应不知道何时更新它的问题。
标签: javascript reactjs typescript ecmascript-6