当前位置: 首页 > 面试题库 >

React 0.13 this.getDOMNode()等同于React.findDOMNode()

艾宁
2023-03-14
问题内容

在React版本0.12中这可以很好地工作:

componentDidMount: function () {
    var dom = this.getDOMNode();
}

该变量dom获取渲染组件的实际DOM节点。但是,将其转换为React 0.13不能按预期工作:

componentDidMount: function () {
    var dom = React.findDOMNode();
    // dom is undefined
}

我尝试了React.findDOMNode(this)哪一种也不起作用。基本上,我只是试图在不使用ref的情况下获取render函数渲染的顶级dom节点。这可能吗?


问题答案:

更新React v0.14 +

在React v0.14
+中,这已经更改,您现在应该使用react- dom模块:

import ReactDOM from 'react-dom';

ReactDOM.findDOMNode(this);

ES6

class Test extends React.Component {

  componentDidMount() {

    const element = ReactDOM.findDOMNode(this);

    console.log(element);

    alert(element);

  }



  render() {

    return (

      <div>test</div>

    );

  }

}



ReactDOM.render(<Test />, document.getElementById('r'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>

<div id="r" />

ES5

var Test = React.createClass({

  componentDidMount: function() {

    var dom = ReactDOM.findDOMNode(this);

    console.log(dom);

    alert(dom);

  },

  render: function() {

    return React.createElement('div', null, 'test');

  }

});



ReactDOM.render(React.createElement(Test), document.getElementById('r'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>

<div id="r" />

React v0.13及以下

将此作为参数传递肯定可以工作:

React.findDOMNode(this);

如果没有,则可能正在发生其他情况。请参见下面的演示:

var Test = React.createClass({

  componentDidMount: function() {

    var dom = React.findDOMNode(this);

    console.log(dom);

    alert(dom);

  },

  render: function() {

    return React.DOM.div(null, 'test');

  }

});



React.render(React.createElement(Test), document.getElementById('r'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react.js"></script>

<div id="r"></div>


 类似资料:
  • 问题内容: 在PHP中可以做到。在JavaScript中,您通常会使用相同的方法,但这并不完全相同。如果确实存在,但条件是或(或可能还有其他值),则条件也将评估为false 。 JavaScript 中PHP的完美替代品是什么? 从更广泛的意义上讲,有关JavaScript处理不存在的变量,没有值的变量等的通用完整指南会很方便。 问题答案: 我通常使用运算符: 如果该属性不存在或其值是,它将返回。

  • 问题内容: 我正在寻找一种等效于C / PHP 或C#/ Java程序员(适用于.NET)的JavaScript 。 我的基本要求是现在使用数字的千位分隔符格式,但是可以处理很多组合(包括日期)的东西会很好。 我意识到Microsoft的Ajax库提供了的版本,但我们不希望该框架的全部开销。 问题答案: 从ES6开始,您可以使用模板字符串: 除此以外: 尝试sprintf()for JavaScr

  • 问题内容: 我在Windows Server 2008上使用SQL Server 2008 Enterprise。我想从前11位到前20位选择结果(例如,我只对第11位到第20位结果感兴趣)。任何想法如何有效地在tsql中编写此查询? 在此先感谢,乔治 问题答案: 不幸的是,SQL Server没有提供类似于MySQL语法的任何东西。但是,您可能想要尝试使用派生表,如下所示:

  • 问题内容: 这是执行字符串替换的两种方法: 如何使用Java做与第一种方法类似的操作? 问题答案: 或更短:

  • 问题内容: 我需要能够生成运行查询,该查询将返回下表中的ID的下一个值: 在Oracle中,您可以在序列上调用NEXTVAL,它为您提供下一个序列(注意:不必在表上进行插入)。 谷歌搜索后,我发现您可以使用以下查询找到auto_increment的当前值: 问题是我希望每次查询该值时该值都增加。在Oracle中,当您调用nextval时,即使不将行插入表中,序列的值也会增加。 有什么方法可以修改上

  • 问题内容: 实现与Java等效的C ++的首选方法是什么? 问题答案: 尝试使用: 这要求你的编译器启用rtti支持。 编辑:我对这个答案有很好的评论! 每次需要使用dynamic_cast(或instanceof)时,最好问问自己是否必要。通常,这是不良设计的标志。 典型的解决方法是将要检查的类的特殊行为放入基类的虚函数中,或者引入诸如访问者之类的东西,你可以在不更改接口的情况下为子类引入特定行