在 React.js/Gatsby.js 中使用 gsap 为动画定位 class 名称是一种好习惯吗
Is it good practice to target class names for animations with gsap in React.js/Gatsby.js
我已经阅读了有关反应集成的 gsap 文档,它建议使用 useRef()
s 来定位要动画的元素,如下所示:
const ref = useRef()
gsap.to(ref, {...})
但是,这非常不灵活,因为引用仅限于组件的文件。在 gsap 中,您倾向于像使用 gsap.timeline()
一样定位网站周围的多个元素,因此如果没有像使用上下文 api.
这样的复杂逻辑,几乎不可能从多个组件定位多个引用
所以我想知道在 React 中使用带有 class
名称的定位元素的老式方法是否是正确的方法?
就像在 useEffect
:
里面一样
gsap.from('.foo', {...})
因为使用 class 名称似乎是在处理直接 dom 操作,这似乎是一种不好的做法。
有人可以插话吗?
一般来说,你应该避免使用通用选择器字符串(你正在做的)作为 React 中补间的目标。您想要这样做的部分原因是因为它反应不是很灵敏,并且不会将组件严格地保留给它们自己。其次,window
引用可能并不总是存在,因此在某些情况下它会抛出警告(或错误,具体取决于您的代码)。
尝试坚持使用 refs 并有选择地使用来自该 ref 的选择器。这样做可以让您两全其美:
const theRef = useCallback((node) => {
if (!node) return;
const spans = node.querySelectorAll('span')
gsap.to(spans, { autoAlpha: 1})
},[])
...
<div ref={theRef}>
<span />
<span />
<span />
</div>
如果你必须使用通用选择器字符串,测试,测试,然后在一堆不同的情况下再次测试它。从动画的角度来看,可能不会影响性能,但请确保清理垃圾,因为如果您不在 componentUnmount
s.
上停止动画,那确实会使站点陷入困境
对于 React + GSAP 的非常一般的介绍,this article 是一个很好的起点。
我已经阅读了有关反应集成的 gsap 文档,它建议使用 useRef()
s 来定位要动画的元素,如下所示:
const ref = useRef()
gsap.to(ref, {...})
但是,这非常不灵活,因为引用仅限于组件的文件。在 gsap 中,您倾向于像使用 gsap.timeline()
一样定位网站周围的多个元素,因此如果没有像使用上下文 api.
所以我想知道在 React 中使用带有 class
名称的定位元素的老式方法是否是正确的方法?
就像在 useEffect
:
gsap.from('.foo', {...})
因为使用 class 名称似乎是在处理直接 dom 操作,这似乎是一种不好的做法。
有人可以插话吗?
一般来说,你应该避免使用通用选择器字符串(你正在做的)作为 React 中补间的目标。您想要这样做的部分原因是因为它反应不是很灵敏,并且不会将组件严格地保留给它们自己。其次,window
引用可能并不总是存在,因此在某些情况下它会抛出警告(或错误,具体取决于您的代码)。
尝试坚持使用 refs 并有选择地使用来自该 ref 的选择器。这样做可以让您两全其美:
const theRef = useCallback((node) => {
if (!node) return;
const spans = node.querySelectorAll('span')
gsap.to(spans, { autoAlpha: 1})
},[])
...
<div ref={theRef}>
<span />
<span />
<span />
</div>
如果你必须使用通用选择器字符串,测试,测试,然后在一堆不同的情况下再次测试它。从动画的角度来看,可能不会影响性能,但请确保清理垃圾,因为如果您不在 componentUnmount
s.
对于 React + GSAP 的非常一般的介绍,this article 是一个很好的起点。