react-spring: three and web are incompatible
🐛 Bug Report
react-spring/web is not working when a @react-spring/three
happens before, unless both is happeing in the same file. From here on this is just wild guessing from my side why this happens.
I am using react spring for a web and a threejs context. Respectivly importing both with
import { animated, useTransition, config, useSpring } from "@react-spring/web";
// or
import { useSpring, animated, config } from "@react-spring/three";
To Reproduce
Import a animated three component and a animated web component. The useSpring web component stops working:
Expected behavior
Importing react-spring/three and react-spring/web both enable working springs no matter if imported from different files.
Link to repro (highly encouraged)
Working animations: https://codesandbox.io/s/single-file-69el5?file=/src/App.js Non Working example: https://codesandbox.io/s/multi-file-11oph?file=/src/App.js
Environment
react-spring
v9.2.3react
v17.0.2
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 9
- Comments: 28 (5 by maintainers)
Commits related to this issue
- chore: fix demos remove three – relates to #1586 — committed to pmndrs/react-spring by joshuaellis 3 years ago
- Add workaround for: https://github.com/pmndrs/react-spring/issues/1586 — committed to alextebbs/enigma by alextebbs a year ago
- Add workaround for: https://github.com/pmndrs/react-spring/issues/1586 — committed to alextebbs/enigma by alextebbs a year ago
- :wrench: Fix: 의존성 충돌 문제 해결 (@react-spring/three 의존성 제거) - https://github.com/pmndrs/react-spring/issues/1586#issuecomment-1499253042 - https://www.npmjs.com/package/@react-three/drei?activeTab=depend... — committed to YoungeuiHong/three-js-study by YoungeuiHong 5 months ago
@xiaotianxt I checked out your example after coming across this problem myself. It looks like the following suggestion may apply to you too as you’re using
drei
(https://github.com/pmndrs/react-spring/issues/1889#issuecomment-1286828218)@laffan Drop the dependency on spring, drei already depens on it (https://www.npmjs.com/package/@react-three/drei?activeTab=dependencies) and having multiple version causes this issue.
Thanks @skrat - For some reason I had tried that and it wasn’t working, but once I deleted node_modules and reinstalled it works great.
I still have the
Cannot call the manual advancement of rafz whilst frameLoop is not set as demand
issue, which can be reproduced here.I also faced the situation that a react-spring animation outside of an r3f Canvas is not executing when a Canvas with frameloop=“never” prop is present. A way to trigger the spring animation and even to set a frame rate for the animation is to use the advance method of raf like this:
So I updated to the latest packages and tried it out today. The issue remains while your workaround works well:
If someone is looking for a copy-paste solution.
Can I suppress the warning from react-spring-rafz somehow?
Cannot call the manual advancement of rafz whilst frameLoop is not set as demand
is spamming my sonsole.@marceloavf no, sorry. I haven’t checked for a solution tbh. A quick search led me to console-suppress. As this is just a single view in my app I don’t mind too much.
Hm this is probably from the global side effect of importing anything from the
animated
file of@react-spring/three
.For some context we make
@react-three/fiber
control the rendering loop forthree
animated components because then it also works in XR see #1518. So the workaround would be to do:which would then mean that our
rafz
package which uses the nativerequestAnimationFrame
is running the render loop removing the r3f need.If you have an idea on how to resolve this i’d be more than happy to hear it and talk through it more!