从 REACT 17 中文件 functionComponentA 中的函数组件 B 中的文件 fileA 中的类组件 ClassComponentA 调用名为 functionA 的函数

Posted

技术标签:

【中文标题】从 REACT 17 中文件 functionComponentA 中的函数组件 B 中的文件 fileA 中的类组件 ClassComponentA 调用名为 functionA 的函数【英文标题】:Call function named functionA from class component ClassComponentA in file fileA in function component B in file functionComponentA in REACT 17 【发布时间】:2021-04-12 14:18:32 【问题描述】:

我有两个组件,一个是类组件,另一个是函数组件。 我想调用放置在classComponentA中的functionComponentA中的方法。 我通过在道具中发送方法来做到这一点。 我不想这样做

import React,  Component  from 'react'
import functionComponentA from './functionComponentA'
class ClassComponentA extends Component 
    constructor(props) 
        super(props)
        this.state = 
            coolVariable : 1
    

    functionA= () => 
        return "something"

    render()

    const functionComponentA = <functionComponentA method= this.doStuff.bind()/>
    return functionComponentA
    

export default ClassComponentA

//the code below is in a different file
import ClassComponentA from './ClassComponentA'
function FunctionComponentA (props)
    return <input onBlur= event => ClassComponentA.functionA()/>

export default FunctionComponentA

当我按照上面的代码执行时,我得到 ClassComponentA__WEBPACK_IMPORTED_MODULE_2__.default.functionA is not a function 我不想将该函数作为道具发送,但我想从放置其他组件的文件中调用它。可以以任何方式完成吗?我做错了什么?

import React,  Component  from 'react'
import functionComponentA from './functionComponentA'
class ClassComponentA extends Component 
    constructor(props) 
        super(props)
        this.state = 
            coolVariable : 1
    

    functionA= () => 
        return "something"

    render()

    const functionComponentA = <functionComponentA method= this.doStuff.bind()/>
    return functionComponentA
    

export default ClassComponentA

//code below is from a different file
function FunctionComponentA (props)
    return <input onBlur= event => props.functionA()/>

export default FunctionComponentA

【问题讨论】:

我认为functionComponentA 应该以大写字母开头。 functionA 仅在“实例化”后可用 【参考方案1】:

你的错别字很多,基本错误很少:

// typo: functionComponentA, no need to bind if you use arrow function
// there is no function doStuff, rename from functionA
<FunctionComponentA method=this.doStuff/>

// call method() as the prop name and not functionA().
function FunctionComponentA (props)
    return <input onBlur=()=> props.method() />

最后代码应该是这样的:

class ClassComponentA extends Component 
  doStuff = () => 
    console.log("hello");
  ;
  render() 
    return <FunctionComponentA method=this.doStuff />;
  


function FunctionComponentA(props) 
  return <input onBlur=props.method />;

【讨论】:

以上是关于从 REACT 17 中文件 functionComponentA 中的函数组件 B 中的文件 fileA 中的类组件 ClassComponentA 调用名为 functionA 的函数的主要内容,如果未能解决你的问题,请参考以下文章

VSCode 不断要求在 NextJS 和 React 17 应用程序上导入 React

React - 从 17.0.1 更新到 17.0.2 时出错 [重复]

从数组映射React JS中过滤多个项目[重复]

浅谈Node中的模块化

从 React 和 Spring Boot 上传 CSV 文件

从 Postgres 返回图像 url 到前端 - Node / React