我正在尝试使用在工作线程中完成处理的反应组件来更新画布。我在 EMCA5 中的所有困难部分都可以正常工作,但是移植到 React/Babel/JSX,我最大的问题是系统不再识别 ArrayBuffer 来将数据传递给工作线程。以下代码因“TypeError:ArrayBuffer 不是构造函数”而死:
import React from 'react';
// import Calculater etc...
export default class CalculationDisplay extends React.Component {
componentDidMount() {
var buffer = new ArrayBuffer(100 * 100 * 4);
var view = new Uint32Array(buffer);
var calculator = new Calculator(view);
const ctx = this.refs.canvas.getContext('2d');
// worker calculation and display goes here...
}
render() {
return (
<canvas ref="canvas" width={600} height={600}/>
);
}
}
在对 babel-polyfill 和 core-js 进行了大量研究之后,我能想到的所有变体都以同样的方式消失:
var ArrayBuffer = require('core-js/modules/es6.typed.array-buffer');
import ArrayBuffer from 'core-js/modules/es6.typed.array-buffer';
import { ArrayBuffer } from 'core-js/modules/es6.typed.array-buffer';
import { ArrayBuffer } from 'babel-polyfill';
到目前为止,我发现唯一可行的方法是忘记任何导入/要求,只需访问 ArrayBuffer 就可以了:
var buffer = new global.ArrayBuffer(100 * 100 * 4);
var view = new global.Uint32Array(buffer);
..这实际上有效并且显示显示在页面上,但它看起来很难看,我无法想象这是引用 ArrayBuffer 的预期方式。有没有人成功导入 js ArrayBuffer 和相关类,以便可以按预期访问它们?
..OK 遵循 zerkms 的建议,我更新为:
import React from 'react';
import 'babel-polyfill';
// import Calculater etc...
export default class CalculationDisplay extends React.Component {
componentDidMount() {
var buffer = new ArrayBuffer(100 * 100 * 4);
var view = new Uint32Array(buffer);
. . .
..它可以正常工作 - 我想我之前尝试从 babel-polyfill 导入类名太花哨了。