Javascript 使用ReactJS时使用ref和document.getElementById等有什么区别?

Javascript 使用ReactJS时使用ref和document.getElementById等有什么区别?,javascript,web,reactjs,Javascript,Web,Reactjs,使用以下各项的区别/优点/缺点是什么: React.findDOMNode(this.refs.elementReferenceName) 及 使用ReactJS?时,使用React.findDOMNode的主要优点和原因是它保持在React范例中,因为您向它传递一个组件——在大多数情况下,您处理的是React组件(处理生命周期函数或调用在组件描述符中实现的函数) 依赖DOM元素中的id会破坏React中的封装,因为它不使用id 也就是说,这取决于你和你的特定应用的需要,以确定哪个是最好的

使用以下各项的区别/优点/缺点是什么:

  React.findDOMNode(this.refs.elementReferenceName)


使用ReactJS?

时,使用React.findDOMNode的主要优点和原因是它保持在React范例中,因为您向它传递一个组件——在大多数情况下,您处理的是React组件(处理生命周期函数或调用在组件描述符中实现的函数)

依赖DOM元素中的id会破坏React中的封装,因为它不使用id

也就是说,这取决于你和你的特定应用的需要,以确定哪个是最好的使用。与其他React函数一样,您必须小心,因为在错误的时间调用
React.findDOMNode
(在渲染中或组件未装入时)将引发异常。OTOH,
document.getElementById
在卸载组件时不会引发异常;但如果存在多个具有该id的元素,则可能返回错误的元素

如果你还没有找到它


另外,

findDOMNode
(在正常情况下)1)进行一些检查,如果这些检查失败,则以正常方式失败;2) 填充内部缓存(
nodeCache
)对象
getElementById
显然不执行任何操作-如果找不到任何内容,它只会返回
null
。这只是一个注释,而不是答案:findDOMNode()仅对已装入的组件(即已放入DOM中的组件)起作用。如果您尝试对尚未装入的组件调用此函数(如在尚未创建的组件上的render()中调用findDOMNode()),将引发异常。它允许您通过元素引用而不是id查找Dom节点。如果您的组件没有类或id,或者它确实存在,但您在当前上下文中不知道它们?
  document.getElementById(elementId)