React.js:为什么没有componentDidRender事件?

时间:2014-12-29 11:50:03

标签: javascript events dom reactjs

我刚开始使用React,有几次我曾经想过:"为什么没有componentDidRender事件?"。

假设我有一个将表呈现给DOM的组件,我想在此表上使用bootstrap-sortable以允许用户对他想要的任何列进行排序。在bootstrap-sortable的情况下,您需要在绘制表格后运行$.boostrapSortable(),以便初始化插件。

在我看来,React组件上有两个处理程序,可以考虑用于此目的:

  • componentDidMount:这不起作用,因为在执行的这一点似乎没有更新DOM。

  • componentDidUpdate:这可能会有效,但不会在初始渲染时触发。

我并不是说React实际上缺少componentDidRender函数,因为我假设有一个完全合乎逻辑的解释为什么它不存在。我只想问是否有人可以解释为什么不存在这样的功能,以及" React方式"处理像上面那样的案件。

2 个答案:

答案 0 :(得分:4)

componentDidMount中,您可以执行:this.getDOMNode()以获取对该组件的基础DOM的引用。因此,如果你想在jQuery中使用已安装的组件,你可以这样做:

componentDidMount: function() {
    $(this.getDOMNode());
}

http://facebook.github.io/react/docs/working-with-the-browser.html

这是一个小提琴,显示jQuery作用于反应组件的DOM节点:

http://jsfiddle.net/sa5e88ys/1/

如您所见,它会按预期为div添加边框。如果您仍然遇到问题,我想可能是您使用的插件而不是jQuery或做出反应?

答案 1 :(得分:4)

虽然没有componentDidRender,但您可以创建一个具有所需行为的方法,并在componentDidMount(仅在第一次渲染后调用)和componentDidUpdate(即每次渲染后调用,但第一次调用。)

此外,这是从组件中获取引用DOM节点的首选方法: https://facebook.github.io/react/docs/refs-and-the-dom.html