rive-app / rive-app/rive-react
`useRive` React component lifecycle related init issue
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 1.2k
- Forks
- 58
- Avg merge
- 3h 23m
- Merged PRs (30d)
- 6
Description
Hello there! 👋
We are using useRive from this library for animations within our DesignSystem, and have noticed a pretty critical React component lifecycle related bug with the useRive hook. 😭
I've produced a simple reproduction of this bug in the latest published version of useRive from @rive-app/react-canvas@4.3.3
https://stackblitz.com/edit/stackblitz-starters-tc2yg6?file=app%2Fpage.tsx
Essentially, when first revealed (mounted), the Rive animation inits and autoplays as expected. However, once it's unmounted and then re-mounted (in this case using a simple conditional render bool) - the rive animation fails to init and autoplay.
Here is a simple code snippet which demonstrates the issue:
...
const [show, setShow] = useState(false);
const { RiveComponent } = useRive({
src: 'https://cdn.rive.app/animations/vehicles.riv',
autoplay: true,
layout: new Layout({
fit: Fit.Cover,
alignment: Alignment.Center,
}),
});
return (
<div>
<button onClick={() => setShow((old) => !old)}>toggle</button>
{show && <RiveComponent style={{ width: '500px', height: '500px' }} />} {/*<-- this only loads up and plays the very first time it's mounted. :( */}
</div>
);
...
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked StackBlitz reproduction and inspect the useRive hook in @rive-app/react-canvas@4.3.3. Trace initialization across the conditional mount and unmount cycle, then verify that the RiveComponent initializes and autoplays every time it is remounted.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100