当前位置: 首页 > 知识库问答 >
问题:

ReactJS问题组件功能范围和共享功能

能向晨
2023-03-14

我有一个关于ReactJS和组件的问题,特别是关于函数如何在组件系统中交互。

在这个例子中:

// Index.js

import React from ‘/reactʼ;
import ReactDOM from ‘/react-domʼ;
import App from ‘./App.jsʼ;

ReactDOM.render(<App />, document.getElementById(‘rootʼ));


// App.js

import React from ‘/reactʼ;

class App extends React.Component { 
    constructor(props) {
        super(props);
        this.state = {someProp = ‘ʼ}; 
    };

    functionA = (e) => { console.log(e);
    };

    Render() {
        return <div><ComponentA /></div>
    }; 
};

export default App;

// ComponentA.js

import React from ‘/reactʼ; 
import App from ‘./../App.jsʼ;

class ComponentA extends React.Component { 
    constructor(props) {
        super(props);
        this.state = {someProp = ‘ʼ}; 
    };
    functionB = App.functionA

    Render() { 
        return(
            <div>
                <input onSubmit={this.functionB} />
            </div> 
        );
   }; 
};

export default ComponentA;

ComponentA导入pp.js,并尝试将App.functionA分配给函数B,然后在JSX中调用它。这会导致失败,基本上就是说函数没有定义。

我知道这不是功能共享的方式(我已经学习了如何通过道具等传递功能)。

我只是想知道为什么这不起作用,以帮助我更好地理解React和Javascript的机制

谢谢你,柯蒂斯

共有2个答案

罗智志
2023-03-14

我的脑子终于明白了哈哈。。。我想。

基本上,由于类[App component]的实例未在ComponentA的范围内初始化,因此无法访问App函数。

这使它工作(免责声明:我不打算这样做,我知道它的可怕代码)

// ComponentA.js

import React from ‘/reactʼ; 
import App from ‘./../App.jsʼ;

class ComponentA extends React.Component { 
    constructor(props) {
        super(props);
        this.state = {someProp = ‘ʼ};
        this.appInstance = new App();
    }
    functionB = (e) => {
        this.appInstance.functionA(e);
    }

    Render() { 
        return(
            <div>
                <input onSubmit={this.functionB} />
            </div> 
        );
   } 
};

export default ComponentA;
孟晨朗
2023-03-14

要从另一个React组件调用函数,可以使用ES6表示法编写静态方法。如果您正在使用ES7,那么您也可以编写静态属性。

您可以这样在ES6类中编写静态:

class Component extends React.Component {
static propTypes = {
...
}

static someMethod(){
}

}

关于静态函数的工作演示

 类似资料:
  • 我写这个问题是因为我想请你帮助我如何在我的功能组件上使用redux。我查看了其他使用React组件的示例,但我不理解如何在功能组件中获得“存储”值。 我的想法是用我的 百货商店getState() 在我的功能组件中检查状态并与UI交互,但我无法实现。 需要帮忙吗? 例如,功能组件: 如何在标题组件中使用“存储”对象?它在我的应用程序组件上工作,只是我不知道如何在我的组件中使用它。 我的问题是: 我

  • 就像我们对在Azure blob存储中创建或删除的blob有blob触发器或事件触发器一样,我需要有一个在文件共享中上传或创建文件时触发的函数。Blob存储触发器、事件网格触发器不适用于Azure文件共享。你能建议任何自定义触发器函数或任何其他在文件共享上使用触发器函数的方法吗?

  • 问题内容: 我有多个组件都需要做同一件事。(一个简单的函数可以映射其子组件,并对每个子组件执行某些操作)。目前,我正在每个组件中定义此方法。但是我只想定义一次。 我可以在顶层组件中定义它,然后将其作为道具传递。但这并不完全正确。它更多的是库功能而不是道具。(在我看来)。 正确的做法是什么? 问题答案: 如果您使用诸如browserify之类的东西,那么您可以拥有一个外部文件,即util.js,该文

  • 如何获取QQ登录的unionId? 在AuthConfig中设备unionId为true AuthRequest authRequest = new AuthQqRequest(AuthConfig.builder() .clientId("clientId") .clientSecret("clientSecret") .redirectUri("

  • 分享功能 使用场景 开发者希望用户可以将积分商城内的商品、活动分享出去,吸引更多的用户参与,获取站外引流。可以使用兑吧提供的定制分享功能。 使用前提 1、开发者需要有自己的分享实现方式和分享接口 2、在管理后台配置好并开启分享功能 分享配置路径:兑吧后台 ——> 配置 ——> 更多 ——> 分享配置 使用方式 在兑吧后台开启分享开关以后,积分商城H5页面中,就会有分享的信息输出,分享信息是存储在页

  • 使用ST_距离会引起一些混乱: 因此返回0.12585153952177025。 结果似乎有点奇怪,因为在一个简单的可见检查中,这些点非常遥远,结果应该以米为单位。 例如: 返回53536.74349675,它似乎工作正常。 你能告诉我我做错了什么吗?