Creating a web worker inside React

后端 未结 3 1393
无人及你
无人及你 2020-12-15 09:48

I have a React app created with create-react-app, not ejected. I\'m trying to use web workers. I\'ve tried the worker-loader package (https://github.com/webpack-contrib/work

3条回答
  •  孤街浪徒
    2020-12-15 10:14

    As I've written in the EDIT of my question above, I've found the solution here: https://github.com/facebookincubator/create-react-app/issues/1277

    This is a working example:

    // worker.js
    const workercode = () => {
    
        self.onmessage = function(e) {
            console.log('Message received from main script');
            var workerResult = 'Received from main: ' + (e.data);
            console.log('Posting message back to main script');
            self.postMessage(workerResult);
        }
    };
    
    let code = workercode.toString();
    code = code.substring(code.indexOf("{")+1, code.lastIndexOf("}"));
    
    const blob = new Blob([code], {type: "application/javascript"});
    const worker_script = URL.createObjectURL(blob);
    
    module.exports = worker_script;
    

    Then, in the file that needs to use the web worker:

    import worker_script from './worker';
    var myWorker = new Worker(worker_script);
    
    myWorker.onmessage = (m) => {
        console.log("msg from worker: ", m.data);
    };
    myWorker.postMessage('im from main');
    

提交回复
热议问题