在非反应组件中调用App的forceUpdate而不将App作为属性传递

时间:2018-08-09 08:57:26

标签: javascript reactjs ecmascript-6

我有一个模块,它不是React组件(我们称其为A),但是它的变量由react显示。现在,A必须调用App.js的forceUpdate函数。但我不想在创建A的新对象时始终将App.js作为属性传递。

我创建了以下内容:

App.js:

let forceUpdateCaller;

export default class App extends React.Component {

    static forceUpdate = () => {
        if (forceUpdateCaller) {
            forceUpdateCaller();
        }
    }

    forceUpdateCaller = () => {
        this.forceUpdate();
    }

    constructor(props) {
        super(props);        

        forceUpdateCaller = this.forceUpdateCaller;
    }

    ...

}

A:

import App from "../App";

export default class A extends ...{

    constructor() {
        super();
    }

    updateContent = () => {

        ...

        App.forceUpdate();
    }
}

但是我敢肯定,有一种更好,更清洁的方法。你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

找到最好的方法:

export let ref;

class App extend React.Component{
    constructor(props){
        super(props);
        ref = this;
    }
}

现在,我在导入{ref}时可以完全访问App对象。 :)