繁体   English   中英

如何从组件中获取元素

[英]How to get element from component

我有一些脚本,需要元素,但是我找不到如何从react组件获取它。 至少,我可以在渲染后获取元素,但是现在我遇到了另一个问题-无法在按钮上创建事件,因为我需要SignatureObj

var SignaturePad = require('signature_pad');

var SignatureWidget = React.createClass({

    _handleClear: function(e, SignatureObj) {
        SignatureObj.clear();
    },

    _getSignature: function(canvas) {
        return new SignaturePad(canvas);
    },

    componentDidMount: function() {

        var wrapper = this.getDOMNode(),
            canvas  = wrapper.querySelector('canvas'),
            SignatureObj = this._getSignature(canvas);
    },

    render: function() {
        var canvas = React.createElement('canvas');

        return (
            <div>
                {canvas}
                <button>Clear</button>
            </div>
        );
    }
});

最后,我需要得到这样的东西

render: function() {
    var canvas = React.createElement('canvas'),
        >> canvasEl = canvas.getElement(),<< magic
        SignatureObj = this._getSignature(canvasEl);

    return (
        <div>
            {canvas}
            <button onClick={this._handleClear.bind(this, SignatureObj)}>Clear</button>
        </div>
    );
}

首先要注意的一点是,不赞成使用getDOMNode,您应该使用findDOMNode,进一步,您不需要在render内使用create元素,因为如果您使用jsx语法,那么它将被转换为您正在使用的语法(createlement ..etc ..在引擎盖下)

关于选择元素的问题:

    React.findDOMNode(this.refs.findMe) 

<-使您找到节点或称其为:D(Magic)

    render: function() {
        return (
            <div>
                <canvas ref='findMe'></canvas> <------- magic
                <button>Clear</button>
            </div>
        );
    }

希望这可以帮助! 一些不错的读物:

裁判: https : //facebook.github.io/react/docs/more-about-refs.html

jsx: https ://facebook.github.io/react/docs/jsx-in-depth.html

我用这种方式添加事件

componentDidMount: function() {
    var pad             = this.refs.pad.getDOMNode(),
        saveButton      = this.refs.save.getDOMNode(),
        clearButton     = this.refs.clear.getDOMNode(),
        SignatureObj    = this._getSignature(pad);

    clearButton.onclick = this._handleClear.bind(this, SignatureObj);
    saveButton.onclick  = this._handleSave.bind(this, SignatureObj);
},

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM