为了账号安全,请及时绑定邮箱和手机立即绑定

错误:函数组件不能有字符串引用。我们建议改用 useRef()

错误:函数组件不能有字符串引用。我们建议改用 useRef()

慕田峪4524236 2022-12-22 14:44:54
我在我的 React 应用程序中使用 ace Editor 并收到上述错误。我想将我在我的 React 应用程序中使用的 Ace Editor IDE 的内容放在通过提交按钮触发的函数调用中。<AceEditorref='aceEditor'height='100%'width='100%'mode={ideLanguage}theme={ideTheme}fontSize={ideFontSize}showGutter={true}showPrintMargin={false}/>这是按钮<Buttontype='button'buttonStyle='btn--primary--normal'buttonSize='btn--medium'onClick={SendCode}>SUBMIT</Button>这是功能const SendCode = () => {  console.log(this.refs.aceEditor.editor.getValue());};我究竟做错了什么??
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

字符串引用是设置 DOM 引用的传统方式。

在最新的 React 版本中,建议对功能组件和类组件使用React.useRef()钩子。React.createRef()

您可以阅读更多详细信息 - https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs

我猜,你可能已经打开了<React.StrictMode>高阶组件的严格模式。这就是为什么会抛出错误/警告的原因。

你应该做什么 -

  1. 声明一个 ref 变量。

    const aceEditorRef = useRef();

  2. 之后,替换ref='aceEditor'ref={aceEditorRef}

 <AceEditor

    ref={aceEditorRef}

    height='100%'

    width='100%'

    mode={ideLanguage}

    theme={ideTheme}

    fontSize={ideFontSize}

    showGutter={true}

    showPrintMargin={false}/>

使用 aceEditorRef.current 获取 DOM 引用


const SendCode = () => {

  console.log(this.aceEditorRef.current.editor.getValue());

};


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信