javascript - 如何为 React Array.map() 迭代应用 CSS 动画?
问题描述
例如,我有这个 CSS 代码来处理一个简单的动画:
还有我的 React 组件来呈现一个简单的列表并使用随机值更改列表:
class App extends React.Component {
constructor() {
super();
this.state = {
items: ["Alex", "David", "John"]
};
}
change() {
this.setState({
items: [Math.random(), Math.random(), Math.random()]
});
}
render() {
return (
<div>
{this.state.items.map((item, index) => (
<p className="flasher" key={index}>
{item}
</p>
))}
<button onClick={this.change.bind(this)}>Change</button>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("react"));
@keyframes flasher {
from {
background: red;
}
to {
background: green;
}
}
.flasher {
display: block;
animation: flasher 0.5s;
background: red;
color: white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="react" />
单击更改按钮后,我将一个渲染到浏览器控制台,但 CSS 动画在这种情况下不起作用……而且只有我第一次渲染的 CSS 动画。
那么,如何将 CSS 动画应用于每一个更改?
显然,此代码仅更改innerText
而不重新渲染元素以应用该 CSS 效果。你知道,我需要这个用于套接字服务的闪光效果。该套接字返回更改,我想应用 flasher 为用户创建一个简单的注意力。
谢谢
解决方案
如果要重置组件和动画。您可以用来使 React 重新安装它的技巧之一。最简单的重新挂载方法是在每次单击按钮后更改组件的键。
例如,改为:
<p className="flasher" key={index}>
使用项目作为键:
<p className="flasher" key={item}>
推荐阅读
- laravel - 从控制器提交 POST 数据
- web-scraping - Scrapy Splash:无法获取数据
- android - 在布局上显示三角形标签
- kotlin - 如何配置 KotlinxSerializer,使其不为字符串引号添加反斜杠转义
- flutter - 在颤振中正确使用问号(空安全)
- ruby-on-rails - 如何在rails 6中仅更新current_user的嵌套表单属性?
- laravel - 在下一个 js 中从 getServerSideProps() 调用后端 api (laravel)
- amazon-web-services - 在 AWS Feature Store 中创建功能组时出现 413 错误
- android - Fallback_Fonts.xml 在 Android 中
- c++ - 多线程代码未按预期工作