You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functionTextInputWithFocusButton(){constinputEl=useRef(null);// `current` 指向已挂载到 DOM 上的文本输入元素constonButtonClick=()=>{inputEl.current.focus();};return(<><inputref={inputEl}type="text"/><buttononClick={onButtonClick}>Focus the input</button></>);}
React Class组件中的
createRef
,与React Hooks函数组件中的useRef
相对应。在说useRef之前,就不得不先看下createRef
这个API的目的,它是为了解决什么问题?这样我们才能更加的了解useRef
API。了解 createRef API
React.createRef 可以很好的帮助开发者,获取到DOM元素节点实例,也可以帮助我们获取Class组件的组件实例。对于
createRef
API 适用情况,在官方文档中已有给出:避免使用 refs 来做任何可以通过声明式实现来完成的事情。
以上就是
createRef
API 的典型使用方法,不过有点需要注意,通过React.createRef
创建的实例,不能挂在函数组件上,因为它们没有实例。如果一定要使用,可以通过props参数的形式进行传递。useRef 使用
useRef
的主要功能与createRef
类似,通过声明useRef
变量而后赋值访问DOM节点。不过相对于createRef
,useRef
功能更加全面和多样。访问DOM节点
通过ref绑定访问DOM节点,DOM节点依然是挂载在current上。这依然是它的核心功能;
保存任何可变值
useRef
对象是一个 current 属性可变且可以容纳任意值的通用容器。请记住,当 ref 对象内容发生变化时,useRef 并_不会_通知,而且每次渲染时都会返回同一个 ref 对象。ref 回调
通过
useCallback
传递依赖为[]
,保证当且仅当组件挂载和卸载时,callback ref 才会被调用。createRef
和useRef
存在明显的差异,不过主体功能基本一致,useRef
不止可访问DOM阶段,还可以在 current 属性存储任意变量而不会被渲染修改,ref 回调没有大的变化,依然是通过传入函数,是 ref 功能扩大化,可以做更多的事情。The text was updated successfully, but these errors were encountered: