Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React.js组件:用户定义的属性。我做得对吗?_Javascript_Reactjs - Fatal编程技术网

Javascript React.js组件:用户定义的属性。我做得对吗?

Javascript React.js组件:用户定义的属性。我做得对吗?,javascript,reactjs,Javascript,Reactjs,我刚刚开始学习React,我想知道如何存储一些任意变量。让我们以下面的例子为例: var StaffRow = React.createClass({ doubleClickTimeout: null, waitingForDoubleClick: false, doubleClick: function(e){ console.log('doubleClick'); }, singleClick: function(e){

我刚刚开始学习React,我想知道如何存储一些任意变量。让我们以下面的例子为例:

var StaffRow = React.createClass({
    doubleClickTimeout: null,
    waitingForDoubleClick: false,
    doubleClick: function(e){
        console.log('doubleClick');
    },
    singleClick: function(e){
        console.log('singleClick');
    },

    clickHandler: function(e){
        if(this.waitingForDoubleClick)
        {
            this.waitingForDoubleClick = false;
            clearTimeout(this.doubleClickTimeout);
            this.doubleClick(e);
        } else {
            this.waitingForDoubleClick = true;
            this.doubleClickTimeout = setTimeout(function() {
                this.waitingForDoubleClick = false;
                this.singleClick(e);
            }.bind(this), 300);
        }
    },

    render: function() {
        var name = "Some Name";
        return (
            <li onClick={this.clickHandler} >
                <span>{name}</span>
            </li>
        );
    }
});
var StaffRow=React.createClass({
双击超时:空,
等待双击单击:false,
双击:功能(e){
log(“双击”);
},
单击:函数(e){
log('singleClick');
},
clickHandler:函数(e){
如果(此。等待双击)
{
this.waitingForDoubleClick=false;
clearTimeout(这是doubleClickTimeout);
这是双击(e);
}否则{
this.waitingForDoubleClick=true;
this.doubleClickTimeout=setTimeout(函数(){
this.waitingForDoubleClick=false;
这是一个简单的点击(e);
}.绑定(本),300);
}
},
render:function(){
var name=“Some name”;
返回(
  • {name}
  • ); } });

    我正在实现一个click/doubleclick处理程序。这很好,但我想知道,这是否是存储一些随机属性(双击超时和等待双击)的正确方法,或者是否存在污染React组件实例的一些警告,我不知道?谢谢。

    虽然不需要,但我会删除第2行和第3行:

    doubleClickTimeout: null,
    waitingForDoubleClick: false,
    
    并将其设置为componentWillMount。原因是,如果这些是对象/数组,那么它们将由使用上述方法的所有实例共享,而componentWillMount是一个函数,因此它们将是干净的引用

    componentWillMount: function(){
        this.doubleClickTimeout = null;
        this.waitingForDoubleClick = false;
    }
    
    经验法则是,如果它影响渲染,它必须处于状态或道具。否则,就要使用实例属性