ref顾名思义我们知道,其实它就可以被看座是一个组件的参考,也可以说是一个标识。作为组件的属性,其属性值可以是一个字符串也可以是一个函数。
其实,裁判的使用不是必须的。即使是在其适用的场景中也不是非用不可的,因为使用ref实现的功能同样可以转化成其他的方法来实现。但是,既然裁判有其适用的场景,那也就是说裁判自有其优势。关于这一点和ref的适用场景,官方文档中是这样说的:
在从提供方法中返回UI结构之后,你可能想冲出反应虚拟DOM的限制,在渲染返回的组件实例上调用某些方法。通常来说,这样做对于应用中的数据流动是不必要的,因为活跃的数据(活性数据)流总是确保最新的道具被传递到每一个从渲染()输出的子级中去。然而,仍然有几个场景使用这种方式是必须的,或者说是有益的:查找渲染出的组件的DOM标记(可以认为是DOM的标识ID),在一个大型的非反应应用中使用反应组件或者是将你现有的代码转化成反应。
下面我们来看这样的一个场景(下面的例子经常被用于裁判的讲解,可见下面描述的场景应该是比较经典的):通过某个事件使& lt;输入/祝辞元素的值被设为空字符串,然后使该& lt;输入/祝辞元素获得焦点。
应用var=React.createClass ({ getInitialState:函数(){ 返回{userInput: "}; }, handleChange:函数(e) { 这一点。设置状态({userInput: e.target.value}); }, clearAndFocusInput:函数(){ 这一点。设置状态({userInput: "});//设置值为空字符串//这里想要实现获得焦点 }, 呈现:函数(){ 回报( & lt; div> & lt;输入 值=https://www.yisu.com/zixun/{this.state.userInput} 值=爸刂煤徒沟恪? & lt;输入ref=" myInput "/祝辞
要想访问这个实例,可以通过this.refs来访问:
this.refs.myInput
先前版本中,我们可以通过React.findDOMNode (this.refs.myInput)来访问组件的DOM。但是现在,已经放弃了findDOMNode函数了,可以直接使用this.refs.myInput来进行访问。
ref回调函数
ref属性也可以是一个回调函数而不是一个名字只,这个函数将要在组件被挂载之后立即执行。这个参照的组件将会作为该函数的参数,这个函数可以立即使用这个组件参数,当然也可以将其保存供以后使用。
其形式也比较简单:
呈现:函数(){ 返回& lt; TextInput ref={(c)=比;这一点。_input=c}}/祝辞;; }, componentDidMount:函数(){ this._input.focus (); }, >之前或者是
呈现:函数(){ 回报( & lt; TextInput ref={功能(输入){ 如果(输入!=null) { input.focus (); } }}/比; ); }, >之前这里需要注意,当这个参照组件被卸载并且这个裁判改变的时候,先前的ref的参数值将为零。这将有效的防止了内存的泄露。所以在上面代码中会有如果判断:
如果(输入!=null) { input.focus (); } >之前上面介绍了裁判的使用场景和方法、下面我们就将上面的例子来补充完整,从而实现获得焦点的功能
应用var=React.createClass ({ getInitialState:函数(){ 返回{userInput: "}; }, handleChange:函数(e) { 这一点。设置状态({userInput: e.target.value}); }, clearAndFocusInput:函数(){ 这一点。设置状态({userInput: "});//明确的输入//我们希望专注& lt;输入/比;现在! 如果(this.refs。myTextInput !==null) { this.refs.myTextInput.focus (); } }, 呈现:函数(){ 回报( & lt; div> & lt;输入 值=https://www.yisu.com/zixun/{this.state.userInput} 值=爸刂煤徒沟恪? ,this.refs。myTextInput就会获取到正确的实例。上面就是裁判的所有内容,更多关于裁判的介绍可以参考裁判组件。
对于裁判我们就介绍到这,希望本文对大家有所帮助。也希望大家多多支持。
参反应组件的使用详解