Skip to content

@react-three/[email protected]

Compare
Choose a tag to compare
@github-actions github-actions released this 21 May 18:20
· 43 commits to main since this release
062b5c4

Major Changes

  • 6c764cc: Remove WorldApi, replace with singleton instance proxy (@wiledal)

    BREAKING CHANGE: The WorldApi has been removed. Instead, you can now get a proxied singleton instance of the world from @react-three/rapier. This is a breaking change, but it should be easy to migrate to.

    Before:

    import { useRapier } from "@react-three/rapier";
    
    const Component = () => {
      const { world } = useRapier();
    
      useEffect(() => {
        // Access to the WorldApi (limited)
        world.raw().bodies.forEach(() => {
          // Do something
        });
    
        // Access the raw Rapier World instance
        const rawWorldInstance = world.raw();
        rawWorldInstance.raw().setGravity(new Vector3(0, -9.81, 0));
      }, []);
    };

    Now:

    import { useRapier } from "@react-three/rapier";
    
    const Component = () => {
      const { world } = useRapier();
    
      useEffect(() => {
        // Access the Rapier World instance directly
        world.bodies.forEach(() => {
          // Do something
        });
        world.setGravity(new Vector3(0, -9.81, 0));
      }, []);
    };

    Note: it is best to avoid accessing properties and methods on the world outside of useEffect in order for the world to be properly synchronized with the React component lifecycle.

    // bad
    const Component = () => {
      const {world} = useRapier()
    
      world.setGravity(...)
    
      return null
    }
    
    // good
    const Component = () => {
      const {world} = useRapier()
    
      useEffect(() => {
        world.setGravity(...)
      }, [])
    
      return null
    }

Minor Changes

Patch Changes

  • 3057f3c: Fix initiation to only happen in mount effects, never render, for increased stability (@wiledal)
  • c4d2446: Internal refactor regarding instances (@wiledal)