美文网首页React 重新学习前端技术
React 文档再学习 6 使用 Ref

React 文档再学习 6 使用 Ref

作者: 吴摩西 | 来源:发表于2022-11-27 12:09 被阅读0次

ref

  • ref 只能当作所谓的应急门,如果系统中大部分的数据都依赖于 ref,系统状态可能需要重新思考。
  • 不要在 render 过程做读写 ref,react 没有跟踪 ref 的能力,对它的读写会导致组件状态难以预测。
  • ref 可以指向任何的值,不过大部分情况都是指向 DOM,方便 focus 一个 DOM,播放 video 组件,将某个元素滚动到屏幕中等操作。

访问子组件的 DOM

  • 直接访问子组件的 DOM 元素不被允许。以下的代码会报 warning。

Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

function MyInput(props) {
  return <input {...props} />;
}
export default function MyForm() {
  const inputRef = useRef(null);
  return <MyInput ref={inputRef} />
}

直接访问其他组件的 DOM 被认为是脆弱的代码。可以通过 forwardRef 显示声明此组件暴露接口,允许外界组件访问内部的 DOM。

const MyInput = forwardRef((props, ref) => {
  return <input {...props} ref={ref} />;
});

实际的应用中,底层的组件设计系统,例如 input, button 等组件,暴露内部的 DOM ,方便外部访问。而较高层的组件,例如 form,列表,页面等,一般不暴露内部的 DOM 引用,以防止内部 DOM 结构变化导致接口不兼容。

React 挂载在 ref 的时机

在 React 中,所有的更新都分为两个阶段:

  • render ,React 调用组件,计算出页面上应该有什么。
  • commit, React 将变化实施在 DOM 上。

所以在 render 过程中,不建议访问 ref。如果 ref 指向 DOM,第一次 render 时,它是 null,后续更新时,由于 DOM 还没有更新,它指向的是尚未更新的 DOM。

React 在 commit 时设置 ref.current。在更新 DOM 以后,React 会立即把 ref.current 挂载在对应的 DOM 元素上。

使用 Ref 的最佳实践

ref 是所谓的应急门,应该在与 React 意外的系统交互时使用。在执行无破坏性的操作,例如聚焦、滚动页面时,没有任何问题。但是如果直接手动改变 DOM ,可能会跟 React 正在执行的变化冲突。

相关文章

  • React 文档再学习 6 使用 Ref

    ref ref 只能当作所谓的应急门,如果系统中大部分的数据都依赖于 ref,系统状态可能需要重新思考。 不要在 ...

  • React.forwardRef和connect的联合使用问题

    先使用 React.forwardRef;再使用 connect 包一层会使 ref 属性漏掉,导致 内部实例无法...

  • React学习笔记(三)

    React中的 ref 的使用 ref是一个引用,在React中使用ref来直接获取DOM元素从而操作DOM Re...

  • React-组件间通信之onRef方法

    组件间通信除了props外还有onRef方法,不过React官方文档建议不要过度依赖ref。本文使用onRef语境...

  • React.forwardRef和connect的联合使用

    先使用 React.forwardRef再使用 connect 包一层会使 ref属性漏掉,导致 内部实例无法传到...

  • React 中 ref 的使用

    ref是reference的简写,它是一个引用,在react中,我们使用ref来操作DOM。 在react中,我们...

  • React Ref使用

    如何通过refs获得对应的DOM? 使用时通过 this.refs.传入的字符串格式获取对应的元素,使用时 thi...

  • 安装gsl

    ref:GSL 在 Ubuntu 下的安装和使用 | Lancezhange ref2:官方doc文档 ref3:...

  • react自定义组件中使用ref

    一、自定义组件使用ref并且透传子组件ref 自定义组件中使用ref需要用到react的2个hooks:1.for...

  • 组件ref的使用

    自己封装的组件,想使用ref,调用内部的方法1.使用React.forwardRef,包裹组件。 2.接收ref属...

网友评论

    本文标题:React 文档再学习 6 使用 Ref

    本文链接:https://www.haomeiwen.com/subject/sqpffdtx.html