改进并确认WASM的加载和调用。

This commit is contained in:
徐涛 2024-12-26 16:00:47 +08:00
parent 63dd0cc686
commit 03b3377107

View File

@ -1,20 +1,13 @@
import {
createContext,
ReactNode,
useCallback,
useEffect,
useMemo,
useState,
useTransition,
} from 'react';
import type * as Wasm from './pkg/color_module';
import init from './pkg/color_module';
import { createContext, ReactNode, useEffect, useMemo, useState, useTransition } from 'react';
import { ColorFunctionContext } from './ColorFunctionContext';
import init, * as funcs from './pkg/color_module';
export const ColorFunctionContext = createContext<{
colorFn: Wasm.InitOutput | null;
export type ColorFunctionContextType = {
colorFn: typeof funcs | null;
isLoading: boolean;
error: Error | null;
}>({
};
export const ColorFunctionContext = createContext<ColorFunctionContextType>({
colorFn: null,
isLoading: true,
error: null,
@ -29,17 +22,6 @@ export function ColorFunctionProvider({ children }: WasmProviderProps) {
const [isPending, startTransition] = useTransition();
const [error, setError] = useState<Error | null>(null);
const loadWasm = useCallback(() => {
startTransition(async () => {
try {
const wasm = await init();
setWasmInstance(wasm);
} catch (e) {
console.error('[Load WASM]', e);
setError(e);
}
});
}, []);
const contextValue = useMemo(
() => ({
colorFn: wasmInstance,
@ -49,7 +31,17 @@ export function ColorFunctionProvider({ children }: WasmProviderProps) {
[wasmInstance, isPending, error],
);
useEffect(() => {
loadWasm();
(function () {
startTransition(async () => {
try {
await init();
setWasmInstance(funcs);
} catch (e) {
console.error('[Load WASM]', e);
setError(e);
}
});
})();
}, []);
return <ColorFunctionContext value={contextValue}>{children}</ColorFunctionContext>;