Элемент Canvas не изменяется при использовании ReactJS и PaperJS вместе

я обнаружил, что элементы canvas правильно изменяют размер при изменении размера окна, когда они находятся внутри компонентов react. Они также правильно изменяют размер при использовании с PaperJS. Однако они не изменяют размер при использовании с PaperJS и ReactJS вместе.

это несовместимость между PaperJS и ReactJS или я неправильно создаю экземпляр PaperJS? Я звоню!--12-->бумаги.setup (canvas) на componentDidMount функция реагирующего компонента, который содержит элемент canvas. Это правильное место для этого?

Я включил фрагменты кода ниже.

примечание: по какой-то причине функция "запустить фрагмент кода" жалуется на фрагменты ReactJS, поэтому я включил ссылки JSFiddle, которые работают нормально.

PaperJS только [успех] - холст изменяет размер в окне размер https://jsfiddle.net/eadlam/srmracev/

// Instantiate the paperScope with the canvas element
var myCanvas = document.getElementById('myCanvas');
paper.setup(myCanvas);

// Draw a circle in the center
var width = paper.view.size.width;
var height = paper.view.size.height;
var circle = new paper.Shape.Circle({
  center: [width / 2, height / 2],
  fillColor: 'grey',
  radius: 10
});

// render
paper.view.draw();
canvas {
  width: 100%;
  height: 100%;
  border: solid 1px red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.22/paper-core.min.js"></script>
<canvas id="myCanvas" resize="true"></canvas>

ReactJS только [успех] - холст изменяет размер окна https://jsfiddle.net/eadlam/0de1mpoa/

var Canvas = React.createClass({
  render: function () {
    return <canvas id="myCanvas" resize="true"></canvas>;
  }
});

React.render(<Canvas/>, document.getElementById('container'));
canvas {
  width: 100%;
  height: 100%;
  border: solid 1px red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/JSXTransformer.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration.js"></script>

<div id="container"></div>

ReactJS + CanvasJS [FAIL] - Canvas не изменяет размер окна https://jsfiddle.net/eadlam/jLo3opgq/

var Canvas = React.createClass({

    componentDidMount: function () {
        // Instantiate the paperScope with the canvas element
        var myCanvas = document.getElementById('myCanvas');
        paper.setup(myCanvas);
        
        // Draw a circle in the center
        var width = paper.view.size.width;
        var height = paper.view.size.height;
        var circle = new paper.Shape.Circle({
            center: [width / 2, height / 2],
            fillColor: 'grey',
            radius: 10
        });
        
        // render
        paper.view.draw();
    },

    render: function () {
        return <canvas id="myCanvas" resize="true"></canvas>;
    }
});

React.render(<Canvas/>, document.getElementById('container'));
canvas {
  width: 100%;
  height: 100%;
  border: solid 1px red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/JSXTransformer.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.22/paper-core.min.js"></script>

<div id="container"></div>

1 ответов


вам придется использовать data-paper-resize prop, так как React не распознает resize проп.

<canvas id="myCanvas" data-paper-resize />

посмотреть Настройки Холст и Поддерживаемые Атрибуты.