Hard
React Shared Worker Implementation: Common Pitfalls and Memory Leak Issues
You're implementing a shared worker for background processing. What's wrong with this pattern?
1function useSharedWorker(workerScript) {2 const [data, setData] = useState(null);3 const [error, setError] = useState(null);4 const workerRef = useRef(null);5 const portRef = useRef(null);67 useEffect(() => {8 workerRef.current = new SharedWorker(workerScript);9 portRef.current = workerRef.current.port;1011 portRef.current.onmessage = (event) => {12 if (event.data.type === 'ERROR') {13 setError(event.data.error);14 } else {15 setData(event.data);16 }17 };1819 portRef.current.start();2021 return () => {22 portRef.current.close();23 };24 }, [workerScript]);2526 const sendMessage = useCallback((message) => {27 if (portRef.current) {28 portRef.current.postMessage(message);29 }30 }, []);3132 const processData = useCallback((inputData) => {33 sendMessage({34 type: 'PROCESS',35 payload: inputData36 });37 }, [sendMessage]);3839 return {40 data,41 error,42 processData43 };44}4546// Worker implementation47const workerCode = `48 const connections = new Set();4950 onconnect = (event) => {51 const port = event.ports[0];52 connections.add(port);5354 port.onmessage = (event) => {55 if (event.data.type === 'PROCESS') {56 // Heavy processing here57 const result = processData(event.data.payload);58 port.postMessage(result);59 }60 };61 };62`;