javascript - 在 ReactJS 中渲染/返回 HTML5 Canvas

标签 javascript reactjs

我正在尝试使用 React 渲染 Canvas 。 Canvas 内的图形也将由 Reacts render 方法处理。

当前代码确实使用我想要的图形渲染 Canvas 。但我正在寻找一种从 render 方法中返回带有图形的 Canvas 的方法。我想要这个的原因是因为我希望它在“React Way”中工作。

理想情况下,我希望我的代码是这样的:

return(
  <div>
    <canvas id='my_canvas_with_graphics_rendered_in_react'></canvas>
  </div>
);

首先,我想知道这是否可能。或者我是否应该寻找替代方案。

也许我错过了 React 的要点,如果是这样,请告诉我。我确实希望有一个解决方案,因为从我读到的内容来看,React 将自己标榜为 MVC 中的 V。这就是为什么,如果可能的话,这将是我正在尝试做的事情的完美解决方案。我不必担心 Canvas 内的渲染。我只需向组件提供数据,React 就会重新渲染更改。

我在 return 语句中标记了我认为应该包含正确代码的位置。

HTML 代码:

<div id='wrapper'>
    <canvas id='canvas'></canvas>
</div>

jsx 代码:

var MyCanvas = React.createClass({
    render:function(){
        var line = this.props.lines;
        var ctx = this.props.canvas.getContext("2d");

        ctx.strokeStyle = 'rgba(0,0,0,0.5)';
        ctx.beginPath();
        ctx.moveTo(line[0].x0, line[0].y0);
        // .... more code .....
        ctx.stroke();

        return(
            <div>
                /* *********************************
                ??? RETURN MY RENDERED CANVAS
                    WITH GRAPHIC LINES. ????
             This is where I want to return the canvas 
                *********************************  */
            </div>
        );

    }
});


var wrapper = document.getElementById('wrapper');
var canvas = document.getElementById('canvas');
var line1 = { x0: 0, y0: 10, x1: 20, y1: 30 };
var line2 = { x0: 40, y0: 50, x1: 60, y1: 70 };

var myCanvas = <MyCanvas canvas={ canvas } lines={ [line1, line2] } />;
React.render(myCanvas, wrapper);

希望我说清楚了。

最佳答案

你唯一的错误是你不熟悉 react 引用。 试试这个:

class ConnectionChart extends React.Component {

    componentDidMount() {
        let canvas = ReactDOM.findDOMNode(this.refs.myCanvas);
        let ctx = canvas.getContext('2d');

        ctx.fillStyle = 'rgb(200,0,0)';
        ctx.fillRect(10, 10, 55, 50);
    }

    render() {
        return (
            <div>
                <canvas ref="myCanvas" />
            </div>
        );
    }
}

您可能已经摆脱了 ES6 风格,但您明白了。 当然你也可以用其他方法绘画^^

关于javascript - 在 ReactJS 中渲染/返回 HTML5 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30296341/

相关文章:

javascript - IE8 - 视差内容 slider 自动播放问题

reactjs - 开 Jest : fake setInterval not working as expected

javascript - 在 React 中初始化和使用 `sessionStorage`

javascript - React.js array.map 不返回 jsx

javascript - 使用 Knockout JS 跟踪表中的更改

javascript - 在 javascript 中 bool 比较与精确匹配搜索之间进行搜索的更快方法

javascript - Selenium WebDriverJS thenCatch 没有捕获 StaleElementException

php - 是否可以从 Ajax 调用外部 PHP 脚本?

javascript - react - onclick 使用事件而不使用箭头功能

generics - React 组件的推断通用类型