当我在 React js 中使用 forwardRef 将 Ref 从函数组件传递到其他函数组件时出现 TypeError,

Posted

技术标签:

【中文标题】当我在 React js 中使用 forwardRef 将 Ref 从函数组件传递到其他函数组件时出现 TypeError,【英文标题】:Getting TypeError when I'm passing a Ref from a function component to other function component using forwardRef in react js, 【发布时间】:2021-10-10 20:44:06 【问题描述】:

我想将 App 中的 ref 传递给 Foo,App 和 Foo 是函数组件,所以我使用 forwardRef() 来扭曲 Foo,但我收到错误警告 TypeError: Cannot add property current, object is not extensible。下面是我的代码,我需要更改吗?

import './App.css';
import React,  useState, Component, useEffect, createRef, useRef, forwardRef  from 'react'
import ReactDOM from 'react-dom'

const Foo=forwardRef((inputRef)=> 
  const onClick = () => 
    inputRef.current.focus()
  
    return (
      <div>
        <input type="text" ref= inputRef ></input>
        <button onClick= onClick >Focus</button>
      </div>
    ) 
)
function App() 
  const inputRef = createRef()
  const clicked = () => 
    inputRef.current.focus()
  
  return (
    <div>
      <Foo ref=inputRef />
      <button onClick= clicked >Click Foo</button>
    </div>
  )
  

export default App;

【问题讨论】:

【参考方案1】:

请在启动函数中定义 ref

const inputRef = useRef(null); 

【讨论】:

【参考方案2】:

Ref Forwarding 接收两个参数 props 和 ref。

React.forwardRef((props, ref) =>
    return(
        <button ref=ref>props.children</button>
    )
;

这是您编辑后的代码,我为 ref 添加了 HTMLInputElement 类型。

type RefType = htmlInputElement | null;
interface PropsType 

const Foo = forwardRef<RefType, PropsType>((props, ref) => 
  const onClick = () => 
   if (ref && "current" in ref) 
    ref.current?.focus();
   
;
  return (
     <div>
       <input type="text" ref=ref></input>
       <button onClick=onClick>Focus</button>
     </div>
 );
);

 function App() 
  const inputRef = createRef<HTMLInputElement>();
  const clicked = () => 
  inputRef.current?.focus();
 ;
  return (
     <div>
     <Foo ref=inputRef />
     <button onClick=clicked>Click Foo</button>
    </div>
   );
  
 export default App;

【讨论】:

这里是您的代码的代码沙箱。 codesandbox.io/s/crazy-browser-u7ylg?file=/src/App.tsx

以上是关于当我在 React js 中使用 forwardRef 将 Ref 从函数组件传递到其他函数组件时出现 TypeError,的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 React.js 在 Heroku 中使用 Axios 执行 GET 请求时,我应该使用哪个基本 url

React.js 使用 JQuery 发布 Django 得到 403

如何在 react.js 中使用 json

Bootstrap cdn 覆盖了我在 react js 中的自定义 css 样式

在Laravel React应用中使用Ionicons 5.

React ref的转发