使用 react-transition-group 在不触发动画的情况下更改项目的键
Change key of item without triggering animation using react-transition-group
我正在构建一个 UI,其中有一个项目列表。当用户添加一个项目时,它会发送一个 API 请求来创建一个新项目,但它也会将该项目添加到带有临时 ID 的列表中。一旦 API 返回,它将用后端的实际 ID 替换项目的 ID。问题是,当我更改列表中项目的键时,react-transition-group 会将其视为 deletion/addition 并触发动画。
这是我的问题:如何告诉 react-transition-group 新 ID 属于旧项目,因此它不会触发更新?
我对react-transition-group不是很熟悉,但是我用其他库做了transition。我认为你现在使用 id 作为密钥。我会在数组中的对象中添加一个键字段。密钥应该是唯一的。您可以通过多种方式使其独一无二,例如使用计数器或 uuid。我喜欢uuid。这样,如果您将时间 ID 更改为最后一个,并且键保持不变,则不会有动画。
const [items, setItems] = useState([
{ key: uuid(), id:'temporal id', name: 'name' },
...
]);
在转换中使用密钥,而不是 ID。
<TransitionGroup className="todo-list">
{items.map(({ key, name }) => (
<CSSTransition
key={key}
timeout={500}
classNames="item"
>
我正在构建一个 UI,其中有一个项目列表。当用户添加一个项目时,它会发送一个 API 请求来创建一个新项目,但它也会将该项目添加到带有临时 ID 的列表中。一旦 API 返回,它将用后端的实际 ID 替换项目的 ID。问题是,当我更改列表中项目的键时,react-transition-group 会将其视为 deletion/addition 并触发动画。
这是我的问题:如何告诉 react-transition-group 新 ID 属于旧项目,因此它不会触发更新?
我对react-transition-group不是很熟悉,但是我用其他库做了transition。我认为你现在使用 id 作为密钥。我会在数组中的对象中添加一个键字段。密钥应该是唯一的。您可以通过多种方式使其独一无二,例如使用计数器或 uuid。我喜欢uuid。这样,如果您将时间 ID 更改为最后一个,并且键保持不变,则不会有动画。
const [items, setItems] = useState([
{ key: uuid(), id:'temporal id', name: 'name' },
...
]);
在转换中使用密钥,而不是 ID。
<TransitionGroup className="todo-list">
{items.map(({ key, name }) => (
<CSSTransition
key={key}
timeout={500}
classNames="item"
>