当前位置: 首页 > Web前端 > HTML5

React的ref是什么?狂喷一波

时间:2023-04-05 21:47:51 HTML5

Reactref理解:通过指定ref获取想要操作的元素,然后修改字符串使用方法varinput=this.refs.myInput;varinputValue=input.value;varinputRect=input.getBoundingClientRect();ref作为回调函数使用classInputextendsComponent{constructor(props){super(props);}focus=()=>{this.textInput.focus();}render(){return(

{this.textInput=input}}/>
)}}输入参数从哪里来?回调函数将接收当前DOM元素作为参数,然后存储对此DOM元素的引用。那么在示例代码中,我们已经将input元素存储在this.textInput中,在focus函数中直接使用原生的DOMAPI来实现焦点。什么时候调用回调函数?答案是回调函数将在组件挂载和卸载时以及ref属性本身发生变化时调用。无状态组件不能使用ref的原因很简单,因为ref指的是组件的实例,而无状态组件恰恰是没有实例的功能组件(FunctionalComponent)。理解:类组件-对象组件-带实例的无状态组件-函数组件-无实例(输入)=>{this.textInput=输入;}}/>);}}父组件的ref回调函数可以使用子组件的DOM。functionCustomTextInput(props){return(
);}classParentextendsReact.Component{render(){return(this.inputElement=el}/>);}}原理是父组件将ref回调函数作为inputRefprops传递给子组件,然后子组件将这个函数绑定到当前DOM,最终的结果就是父组件this存储的DOM的.inputElement是子组件中的输入。同理,如果组件A是组件B的父组件,组件B是组件C的父组件,那么可以使用上面的方法让组件A获取组件C的DOM。Facebook不推荐的思路打破组件封装的做法。多级调用确实不雅,需要考虑其他更好的方案进行优化。

最新推荐
猜你喜欢