gpt4 book ai didi

javascript - React-spring 动画仅在第一次渲染时起作用

转载 作者:行者123 更新时间:2023-11-30 11:15:38 25 4
gpt4 key购买 nike

我尝试为数组中的新条目设置动画,因为它们在 react-spring 中出现。它在第一次渲染时工作得很好,但在更新时不会设置动画

这是一个代码沙箱,我在其中以一定间隔重现了该问题:https://codesandbox.io/s/01672okvpl

import React from "react";
import ReactDOM from "react-dom";
import { Transition, animated, config } from "react-spring";

import "./styles.css";

class App extends React.Component {
state = { fake: ["a", "b", "c", "d", "e", "f"] };

fakeUpdates = () => {
const [head, ...tail] = this.state.fake.reverse();
this.setState({ fake: [...tail, head].reverse() });
};

componentDidMount() {
setInterval(this.fakeUpdates, 2000);
}

componentWillUnmount() {
clearInterval(this.fakeUpdates);
}

render() {
const { fake } = this.state;
return (
<div className="App">
{fake.map((entry, index) => (
<Transition
native
from={{
transform: `translateY(${index === 0 ? "-200%" : "-100%"})`
}}
to={{ transform: "translateY(0)" }}
config={config.slow}
key={index}
>
{styles => <animated.div style={styles}>{entry}</animated.div>}
</Transition>
))}
</div>
);
}
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

我尝试使用 SpringTransition 得到相同的结果。

最佳答案

您的问题是因为您的 key 没有更新。由于您要将 0 的键替换为 0 的键,因此它认为它已经应用了转换。

当将键更改为${entry}_${index}时,它会将它们的键更新为“a_0”,然后更新为“f_0”,它们是唯一且不同的,因此会触发你想要的效果。

entry 单独作为键也不起作用,因为它已经存在于 DOM 中,所以它不会重新渲染转换。

<Transition
native
from={{
transform: `translateY(${index === 0 ? "-200%" : "-100%"})`
}}
to={{ transform: "translateY(0)" }}
config={config.slow}
key={`${entry}_${index}`}
>

在这里查看https://codesandbox.io/s/kkp98ry4mo

关于javascript - React-spring 动画仅在第一次渲染时起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51703504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com