React:从内部渲染函数调用一个函数

Posted

技术标签:

【中文标题】React:从内部渲染函数调用一个函数【英文标题】:React : Call a function from inside render function 【发布时间】:2017-07-11 08:49:40 【问题描述】:

我提到了几个类似的问题,但我的情况略有不同。

Call a React Function from inside Render

How to Call a Function inside a Render in React/Jsx

React: Cant call a function inside child component

export default class CodeEditor extends React.Component 

  appendAssets(asset) 
    console.log(asset)
    this.refs.editor.editor.insert(`player.asset('$asset')`)
    this.refs.editor.editor.focus()
  


  render() 
    function sequenceHierarchy (data, outputArray) 
      level++
      data.forEach(function (asset)
        outputArray.push(<li className=`level_$level`><button onClick=_ => this.appendAssets(asset.name)>asset.name</button></li>)
        if(asset.children.length) 
          sequenceHierarchy(asset.children, outputArray)
        
      )
      level--
    
  

所以sequenceHierarchy函数内部的按钮onClick必须调用appendAssets。当然,由于this 不能调用它,因为它不是该组件的一部分,所以我也尝试了只使用appendAssets(asset.name),但它仍然给出Uncaught ReferenceError: appendAssets is not defined 的错误

【问题讨论】:

【参考方案1】:

我强烈建议您阅读此 answer 以了解 this 关键字及其在函数中的行为。

引用链接的答案:

this(又名“上下文”)是每个函数内部的一个特殊关键字,它的值仅取决于函数的调用方式,而不是定义它的方式/时间/地点。与其他变量一样,它不受词法范围的影响。

(请在继续之前阅读完整的链接答案)

您可以设置对引用正确this 的变量的引用。看到这个JSFiddle

let that = this; // assign this reference to variable that.
function sequenceHierarchy (data, outputArray) 
   data.forEach((item) => 
        outputArray.push(
          <li>
            <button onClick=that.appendAssets.bind(this, item)>
               Append item
             </button>
          </li>
      );            
   )

您可以使用bind 方法设置正确的this,同时调用sequenceHierarchy 函数如下。看到这个JSFiddle

sequenceHierarchy.bind(this, (['1', '2', '3'], [])) 

您可以像这样使用ES6 arrow function 调用sequenceHierarchy 函数。

() => sequenceHierarchy(['1', '2', '3'], []) 

以上所有方法都可以正常工作。

希望这会有所帮助:)

【讨论】:

谢谢哈迪克。这帮助了我。 很高兴它有帮助:)

以上是关于React:从内部渲染函数调用一个函数的主要内容,如果未能解决你的问题,请参考以下文章

错误 无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

React set Hook 从组件外部的函数调用

React:每次渲染都会调用 onClick 处理程序?

从 JS 函数调用 React 组件函数

React 组件模块(从本地 repo 导入)导致错误“只能在函数组件的主体内部调用 Hooks。”

“无效的钩子调用。只能在函数组件的主体内部调用钩子”问题