码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • React项目——withTranslation (HOC) 高阶组件使用ref遇到的问题


    项目中,父组件想要调用子组件的方法,因此想到了使用 ref,子组件是用 withTranslation 包裹的,因为有翻译的需求。

    问题

    export default withTranslation('profile')(SSOLoadBtnNew)
    
    • 1

    但是,问题来了,出现了报错:

    Warning: Function components cannot be given refs.
    Attempts to access this ref will fail.
    Did you mean to use React.forwardRef()?
    
    • 1
    • 2
    • 3

    解决问题

    查找文档资料,withTranslation (HOC),如何使用 ref。

    use ref (>= v10.6.0)

    You can use forwardRefs like:

    const Wrapped = withTranslation('translation', { withRef: true })(MyComponent);
    
    // then pass a ref in your render method like
    const myRef = React.createRef();
    <Wrapped ref={myRef} />;
    
    // use myRef.current to access it
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    因此,在代码中加入 { withRef: true } 可以尝试一波。

    export default withTranslation('profile', { withRef: true })(SSOLoadBtnNew)
    
    • 1

    成功解决!!!

    知识点

    默认情况下,不能在函数组件上使用 ref 属性,因为它们没有实例:

    function MyFunctionComponent() {
      return <input />;
    }
    
    class Parent extends React.Component {
      constructor(props) {
        super(props);
        this.textInput = React.createRef();
      }
      render() {
        // This will *not* work!
        return (
          <MyFunctionComponent ref={this.textInput} />
        );
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    如果要在函数组件中使用 ref,你可以使用 forwardRef(可与 useImperativeHandle 结合使用),或者可以将该组件转化为 class 组件。

    具体可以参考详细文档。

  • 相关阅读:
    【Svelte】-(5)DOM事件 / 事件修饰符 / 组件事件 / 事件转发 (组件之间的事件沟通)
    交换机与路由器技术-02-以太网交换机工作原理
    setoolkit启动报错的问题
    Python类的编程题入门题目
    Linux创建逻辑卷并扩容(超详细)
    腾讯云TI平台持续升级,TI-ACC训练加速性能较原生框架提升超30%
    紫光同创FPGA实现UDP协议栈精简版,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持
    C#鼠标拖拽无边框浮动窗体的方法:窗体控制
    Linux高级I/O:非阻塞IO fcntl | 多路转接之select | poll
    230908
  • 原文地址:https://blog.csdn.net/qq_16525279/article/details/126155561
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号