【发布时间】:2019-10-06 12:16:20
【问题描述】:
我正在循环基于多个数组创建的几个组件。当我单击delete 时,这会减少数组,从而减少组件的数量。
FooList.tsx
import React, { useState } from "react";
const FooList = props => {
const [number, setNumber] = useState("");
const deleteArray = () => {
// Remove the component that was clicked
props.setArray(prev => prev.filter(a => a !== props.current));
};
return (
<>
<input
type="number"
placeholder="Phone"
onChange={e => setNumber(e.target.value)}
value={number}
/>
<button onClick={() => deleteArray()}>delete</button>
</>
);
};
export default FooList;
Foos.tsx
import React, { useState } from "react";
import FooList from "./FooList";
const Foos = props => {
const [array, setArray] = useState([]);
const addToarray = (id: number) => {
const obj = { id };
const a: any = array.concat(obj);
console.log(a);
setArray(a);
};
return (
<>
{array.map((a, index) => (
<div key={index}>
<FooList current={a} setArray={setArray} />
</div>
))}
<button onClick={() => addToarray(Math.random())}>add</button>
</>
);
};
export default Foos;
渲染
<Foos />
我希望当我输入一个值时,有多个值,当我按下 delete 时,该组件应该连同其输入的值一起被删除。
【问题讨论】:
-
使用索引作为键对于渲染 jsx 列表不是一个好主意,尤其是当您可以删除项目时。我会看看演示。
-
Here 是一个优化的更新示例,在不需要时不会重新渲染项目。
-
太棒了。我以前从未使用过
useMemo。我想现在是学习它的时候了。您可以将此添加为答案,我会接受。谢谢
标签: reactjs