【发布时间】:2021-12-28 22:17:43
【问题描述】:
我有一个表格中的项目列表。由于某些外部事件,我希望某个项目的行以突出显示的方式短暂闪烁。
我有一个 CSS 动画 fadingHighlight 来实现所需的视觉效果,当有事件发生时,我在所需的行上设置一个类 last-updated 以触发动画。
但是,当同一行连续多次更新时,只有第一次更新会导致闪烁。 (我相信这是因为 react 将 last-updated 类保留在行上而不是重新渲染它,因此 css 不会重新启动动画。)
如果同一项目连续多次更新,如何重新触发动画?
演示和代码:https://codesandbox.io/s/pensive-lamarr-d71zh?file=/src/App.js
反应的相关部分:
const Item = ({ id, isLastUpdated }) => (
<div className={isLastUpdated ? "last-updated" : ""}>Item {id}</div>
);
const App = () => {
const [lastUpdatedId, setLastUpdatedId] = React.useState(undefined);
const itemIds = ["1", "2", "3"];
return (
<div className="App">
<h2>The list of items</h2>
{itemIds.map((id) => (
<Item key={id} id={id} isLastUpdated={lastUpdatedId === id} />
))}
<h2>Trigger updates</h2>
{itemIds.map((id) => (
<button onClick={() => setLastUpdatedId(id)}>Update item {id}</button>
))}
</div>
);
}
样式:
@keyframes fadingHighlight {
0% {
background-color: #ff0;
}
100% {
background-color: #fff;
}
}
.last-updated {
animation: fadingHighlight 2s;
}
【问题讨论】:
标签: css reactjs css-animations