We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refs 在计算机中称为弹性文件系统(英语:Resilient File System,简称ReFS)
Refs
React 中的 Refs提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素
React
DOM
render
本质为ReactDOM.render()返回的组件实例,如果是渲染组件则返回的是组件实例,如果渲染dom则返回的是具体的dom节点
ReactDOM.render()
dom
创建ref的形式有三种:
ref
只需要在对应元素或组件中ref属性
class MyComponent extends React.Component { constructor(props) { super(props); this.myRef = React.createRef(); } render() { return <div ref="myref" />; } }
访问当前节点的方式如下:
this.refs.myref.innerHTML = "hello";
refs通过React.createRef()创建,然后将ref属性添加到React元素中,如下:
refs
React.createRef()
class MyComponent extends React.Component { constructor(props) { super(props); this.myRef = React.createRef(); } render() { return <div ref={this.myRef} />; } }
当 ref 被传递给 render 中的元素时,对该节点的引用可以在 ref 的 current 属性中访问
current
const node = this.myRef.current;
当ref传入为一个函数的时候,在渲染过程中,回调函数参数会传入一个元素对象,然后通过实例将对象进行保存
class MyComponent extends React.Component { constructor(props) { super(props); this.myRef = React.createRef(); } render() { return <div ref={element => this.myref = element} />; } }
获取ref对象只需要通过先前存储的对象即可
const node = this.myref
通过useRef创建一个ref,整体使用方式与React.createRef一致
useRef
React.createRef
function App(props) { const myref = useRef() return ( <> <div ref={myref}></div> </> ) }
获取ref属性也是通过hook对象的current属性
hook
const node = myref.current;
上述三种情况都是ref属性用于原生HTML元素上,如果ref设置的组件为一个类组件的时候,ref对象接收到的是组件的挂载实例
HTML
注意的是,不能在函数组件上使用ref属性,因为他们并没有实例
在某些情况下,我们会通过使用refs来更新组件,但这种方式并不推荐,更多情况我们是通过props与state的方式进行去重新渲染子元素
props
state
过多使用refs,会使组件的实例或者是DOM结构暴露,违反组件封装的原则
例如,避免在 Dialog 组件里暴露 open() 和 close() 方法,最好传递 isOpen 属性
Dialog
open()
close()
isOpen
但下面的场景使用refs非常有用:
The text was updated successfully, but these errors were encountered:
React中refs是references的缩写吧,表示引用
Sorry, something went wrong.
No branches or pull requests
一、是什么
Refs
在计算机中称为弹性文件系统(英语:Resilient File System,简称ReFS)React
中的Refs
提供了一种方式,允许我们访问DOM
节点或在render
方法中创建的React
元素本质为
ReactDOM.render()
返回的组件实例,如果是渲染组件则返回的是组件实例,如果渲染dom
则返回的是具体的dom
节点二、如何使用
创建
ref
的形式有三种:传入字符串
只需要在对应元素或组件中
ref
属性访问当前节点的方式如下:
传入对象
refs
通过React.createRef()
创建,然后将ref
属性添加到React
元素中,如下:当
ref
被传递给render
中的元素时,对该节点的引用可以在ref
的current
属性中访问传入函数
当
ref
传入为一个函数的时候,在渲染过程中,回调函数参数会传入一个元素对象,然后通过实例将对象进行保存获取
ref
对象只需要通过先前存储的对象即可传入hook
通过
useRef
创建一个ref
,整体使用方式与React.createRef
一致获取
ref
属性也是通过hook
对象的current
属性上述三种情况都是
ref
属性用于原生HTML
元素上,如果ref
设置的组件为一个类组件的时候,ref
对象接收到的是组件的挂载实例注意的是,不能在函数组件上使用
ref
属性,因为他们并没有实例三、应用场景
在某些情况下,我们会通过使用
refs
来更新组件,但这种方式并不推荐,更多情况我们是通过props
与state
的方式进行去重新渲染子元素过多使用
refs
,会使组件的实例或者是DOM
结构暴露,违反组件封装的原则例如,避免在
Dialog
组件里暴露open()
和close()
方法,最好传递isOpen
属性但下面的场景使用
refs
非常有用:参考文献
The text was updated successfully, but these errors were encountered: