簡體   English   中英

React.js函數未觸發

[英]React.js function not firing

最近,我在我的一個項目中看到一個警告,提示說React.createClass現在已被棄用,因此我正在研究一些代碼以使其與新建議兼容。

我遇到的一件事是,我的功能之一似乎沒有像以前那樣觸發。

class Example extends React.Component {

    constructor() {

        super();
        this.state = { content: "Initialize" }

    }

    changeScreen(newScreen) {

        // this fires
        alert("fired 01");

        // this function does not
        this.testFunc;

        var screen = "";

        switch(newScreen) {
            case "one":
                screen = "var01";
                break;
            case "two":
                screen = "var02";
                break;
            default:
                screen = "failed";
                break;
        }

    }

    testFunc() {
        alert("fired 02");
    }

    render() {

        return (
            <div>
                <External.Element execChangeScreen={this.changeScreen} />
                {this.state.content}
            </div>
        );

    }

}

ReactDOM.render (
    <Example />,
    document.getElementById("app")
);

我似乎無法啟動testFunc,我嘗試像下面這樣調用

this.testFunc();
this.testFunc;
() => this.testFunc();

我不確定為什么,但是我認為這可能與這有關

UPDATE

下面所有的答案都是正確的,我標記為接受的答案對我來說似乎是最清晰的,但感謝大家的幫助

你必須明確地設置this內部changeScreen

所以用

<External.Element execChangeScreen={this.changeScreen.bind(this)} />

代替

<External.Element execChangeScreen={this.changeScreen} />

並調用您的函數

this.testFunc();

既然你不使用React.createClass ,你不再有this自動綁定你。 問題出在調用this.changeScreen的時候。

對代碼的最簡單更改是將其綁定到構造函數中:

this.changeScreen = this.changeScreen.bind(this);

然后確保您實際上在調用函數:

this.testFunc();

如果改為在render方法中編寫this.changeScreen.bind(this) ,則每次渲染組件時都會為函數創建一個新副本。

嘗試testFunc =()=> {}或將其綁定到類似this的構造方法中。testFunc = this.testFunc.bind(this)

您需要使用箭頭函數語法在正確的范圍內執行changeScreen()

<External.Element execChangeScreen={() => this.changeScreen('one')} />

changeScreen()函數中,請確保正確調用testFunc。

changeScreen(newScreen) {

    // this fires
    alert("fired 01");

    // this function does not
    this.testFunc();
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM