React Ref使用疑问:Ant Design示例中回调式Ref与createRef用法差异
问题解答
1. 回调形式的Ref是合法用法吗
是的,回调Ref是React官方支持的合法Ref用法,甚至比React.createRef()的出现时间更早。
你看到的saveInputRef = input => (this.input = input)就是典型的回调Ref写法:
- 当
Input组件挂载完成后,React会自动调用这个回调函数,参数为Input组件对应的真实DOM元素(如果是类组件则为组件实例) - 函数内部将传入的实例挂载到类实例的
input属性上,后续你就可以通过this.input直接操作对应的DOM/组件实例 - 当组件卸载时,React会再次调用这个回调,传入
null,自动完成引用清理,避免内存泄漏。
2. 为什么示例没有使用React.createRef()
主要是版本适配原因:
React.createRef()是React 16.3版本才新增的API,在更早的React版本中无法使用。- 你参考的是Ant Design 3.x版本的示例,该版本的适配范围包含了16.3之前的React版本,所以采用了兼容性更好的回调Ref写法,保证所有兼容范围内的项目都能直接复用示例代码。
- 在
React.createRef()推出之前,React官方推荐的Ref写法就是回调Ref,更早的字符串Ref写法已经被标记为废弃,不推荐在生产环境使用。除此之外回调Ref还有更高的灵活性,如果需要在Ref绑定/更新时执行额外的逻辑(比如绑定后自动聚焦输入框、统计节点尺寸等),可以直接在回调函数内扩展,不需要额外配合生命周期函数使用。
内容的提问来源于stack exchange,提问作者happy-integer
相关产品推荐
相关产品推荐

