function Loader() {
var style = {
border: '16px solid #eee',
borderTop: '16px solid #3ae',
borderRadius: '50%',
width: '1cm',
height: '1cm',
animation: 'spin 2s linear infinite',
}
return (
<div style={style}>
<style>{`
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
`}</style>
</div>
)
}
有没有一种方法可以在本地指定@keyframes
到组件(在这个例子中是一个组件函数),而不使用内联字符串?
另外,如果在组件渲染函数中指定<style>
,如果有多个相同类的对象(或使用相同的@keyframes
),是否会导致性能下降?
我们的想法是将<style>
中的内容本地保存在组件中,我不想将其移动到.css
文件中,但同时我也不想在只有一个实际上就足够的情况下重复数百个类/关键帧定义。
5条答案
按热度按时间3ks5zfa01#
如果不编写辅助函数或使用一些可以注入关键帧的标准库,这是不可能的,因为用于此的浏览器选项仍然是实验性的,并且不被广泛支持,例如animate函数。
https://developer.mozilla.org/en-US/docs/Web/API/Element/animate
当使用CSS模块从另一个文件(如css或JS文件)导入它们时,Webpack通常会为您完成注入繁重的工作。
我建议你要么导入CSS文件,要么为此目的检查样式组件帮助函数。
smdnsysy2#
您可以使用与之前相同的方法来完成它,只需声明一个
Keyframes
组件来整理客户端代码。一些用法:或
您需要在百分比值前面添加下划线或其他字母,但其他方面都是相同的。组件循环通过它的所有props输出格式化的css。使用jsx,React有一个特殊的CSS对象类型,需要转换为字符串,否则它只是一个组件。
balp4ylt3#
下面是我们如何在不增加任何依赖性的情况下实现它。
演示:https://codesandbox.io/s/reverent-sun-qjo91?file=/src/index.js
dhxwm5r44#
这个答案是基于罗恩·纽科姆的回答。对我来说,把所有的动画 prop 都粘到它们自己的显式 prop 中似乎更简单,而不必担心任何前缀。
包括它就像
vqlkdk9b5#
我发现的最好的方法是在代码中放置一个样式标签,通过类选择div并添加在其属性中创建的动画。