Skip to content

Commit

Permalink
fix: handle updates from children components
Browse files Browse the repository at this point in the history
  • Loading branch information
pavophilip committed Jan 14, 2024
1 parent 0d684ab commit ce86e63
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 41 deletions.
40 changes: 7 additions & 33 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/react-shader-fiber/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"license": "MIT",
"author": "Philip Pavo",
"dependencies": {
"@clotur/player": "^0.1.8",
"@clotur/player": "^0.1.10",
"@react-shader/renderer": "^1.1.4",
"@react-shader/stdlib": "^1.1.10",
"react": "^18.2.0",
Expand Down
11 changes: 9 additions & 2 deletions packages/react-shader-fiber/src/components/Player.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
ReactElement,
useEffect,
useMemo,
useRef,
useState,
} from "react";
import useRenderShader from "../hooks/useRenderShader.tsx";
Expand Down Expand Up @@ -56,6 +57,7 @@ const Player: FC<
debug = false,
children,
}) => {
const updRef = useRef(() => {});
const [prelude, setPrelude] = useState<string[]>(
normalizePrelude(children?.props.prelude),
);
Expand All @@ -66,6 +68,7 @@ const Player: FC<
prelude,
})}
</PreludeProvider>,
updRef,
);

const preludeStr = useMemo(() => {
Expand Down Expand Up @@ -100,11 +103,15 @@ const Player: FC<
};
}, [debug, fs]);

const player = useCloturPlayer(params);
const { ref, updateFragmentShader } = useCloturPlayer(params);

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
updRef.current = (tree) => updateFragmentShader(toGLSL(preludeStr)(tree));

return (
<div
{...player}
ref={ref}
style={{
width,
height,
Expand Down
12 changes: 8 additions & 4 deletions packages/react-shader-fiber/src/hooks/useRenderShader.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { ReactNode, useState } from "react";
import { ReactNode } from "react";
import { render } from "@react-shader/renderer";

const useRenderShader = (el?: ReactNode) => {
const [tree, setTree] = useState(null);
return tree || render(el, setTree);
const useRenderShader = (
el: ReactNode,
onUpdateRef: { current: (tree: object) => void },
) => {
return render(el, (tree: object) => {
onUpdateRef.current(tree);
});
};

export default useRenderShader;
9 changes: 8 additions & 1 deletion packages/react-shader-fiber/src/test/TestComponent.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { Color } from "../components";
import { useEffect, useState } from "react";

const TestComponent = () => {
return <Color hex={"#ff00ff"} />;
const [state, setState] = useState("#ff0000");
useEffect(() => {
setTimeout(() => {
setState("#af00f0");
}, 1000);
}, []);
return <Color hex={state} />;
};

export default TestComponent;

0 comments on commit ce86e63

Please sign in to comment.