首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从全局Webpack模块访问特定反应组件中的特定方法

从全局Webpack模块访问特定反应组件中的特定方法
EN

Stack Overflow用户
提问于 2016-12-25 18:06:38
回答 2查看 136关注 0票数 2

正如您在下面的代码中所看到的,我希望在loadContent()中建立一个从ReactComponent调用的ajax调用。在访问子方法时,可以使用refs关键字。然而,当调用者和接收者之间的关系不是父和子关系时。如何访问react中的方法?

ComponentA

这是一个全局组件,它将其功能与所需的所有其他响应组件共享。

代码语言:javascript
运行
复制
import $ from 'jquery';

class ComponentA {
    loadContent() {
        $.ajax({
            type: "POST",
            url: "xxxx",
            success: function(data) {
                 // Update the content of ReactComponent.
                 callToThatReactComponent.setContent(data); //Here is the problem
            }
        });
    }
}

var compA = new ComponentA();
export default compA;

ReactCompoment

代码语言:javascript
运行
复制
import React from 'react';
import ComponentA from 'path/to/ComponentA';  // The global module

export default class ReactComponent extends React.Component {
    constructor(props) {
        super(props);
        ComponentA.loadContent();
    }

    setContent(_content) {
        this.setState({
            content: _content
        });
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-26 11:28:59

学习Redux和Thunks。去掉您拥有的这个全局组件。您正在尝试重新创建一个州管理系统,如通量或还原,但做错了。

行动档案:

代码语言:javascript
运行
复制
const loadContent  = () => {
    return (dispatch, getState) => {
        $.ajax({
            type: "POST",
            url: "xxxx",
            success: function(data) {
                 // Update the content of ReactComponent.
                 dispatch({ type: 'LOAD_CONTENT_SUCCESS', data });
            }
        });
    }
};

减速机档案:

任何没有副作用的函数逻辑(比如api调用或Math.Random())都会出现在这里。

代码语言:javascript
运行
复制
const reducer = (state={}, action) => {
    switch(action.type) {
        case "LOAD_CONTENT_SUCCESS":
            return {
                ...state,
                action.data
            };
    }
}

任何组件文件:

使用mapStateToProps可以让我们访问商店中的任何数据。

代码语言:javascript
运行
复制
const mapStateToProps = (state) => ({
    data: state.data
});

export default connect(mapStateToProps)(
    class extends React.Component {
        constructor(props) {
            super(props);
        }

        render() {
            return <div>{this.props.data}</div>
        }
    }
)
票数 1
EN

Stack Overflow用户

发布于 2016-12-25 18:20:45

您可以在ComponentA中使用回调来完成这一任务。

代码语言:javascript
运行
复制
class ComponentA {
    loadContent( update ) {
        $.ajax({
            type: "POST",
            url: "xxxx",
            success: function(data) {
                 // Update the content.
                 update(data);
            }
        });
    }
}

在ReactCompoment中:

代码语言:javascript
运行
复制
   ComponentA.loadContent( content => {         
                             this.setState({ content: content}) } 
                         );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41323412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档