componentDidMoun中不能操作DOM么?

#1

在很多情境下, 我们需要在组件加载完成之后, 进行一些点击操作, 但是我们发现, 在componentDidMount中是不能操作DOM的, 绑定一个0毫秒的定时器就可以, 如下:

componentDidMount: function(){
        window.clickMenu = function(){
            var hash = window.location.hash;
            hash = hash.slice(1); //remove "#"
            var targetOpt = $("a[href='"+hash+"']");
            if(targetOpt){
                if(targetOpt.parent().parent().prev().prop("tagName")=="A"){
                    var targetParent = targetOpt.parent().parent().prev();
                    if(targetParent.parent().parent().prev().prop("tagName")=="A"){
                        var targetGrandpa = targetParent.parent().parent().prev();
                        targetGrandpa.trigger("click");
                        targetParent.trigger("click");
                        targetOpt.trigger("click");
                    }else{
                        targetParent.trigger("click");
                        targetOpt.trigger("click");
                    }
                }else{
                    targetOpt.trigger("click");
                }
            }
        }
        window.setTimeout("clickMenu()",0);
        //clickMenu();
    },

我们并不认为这是一个很好的解决方法, 但是现在又没能找到其他的相关资料. 不知道大家是怎么处理这个问题的?

#2

我会绑定一个 refs 然后在组件上绑定一个事件. 另外把点击放到那个事件里去操作.

在 didMount 上绑定太多东西很不好, 我宁愿加上一个全局的事件中心来管理, 虽然也不好…

#4

componentDidMount 是应该是可以操作 DOM 的,怀疑是其它代码问题。
最好给个 demo 看看