2

というわけで、2店舗あります。最初の pageStore は特定のページのビジネス ロジックを提供し、2 番目の globalStore ロジックは Android/iOS グローバル イベントを提供します。ユーザーが特定のページに入ると React.componentDidMount が呼び出されます

pageEntered: function () {
    this.listenTo(globalStore, this.locationUpdated);
},

この my pageStore から、GPS 更新のグローバル ストレージをリッスンし始めました。しかし、 React.componentWillUnmount で listenTo を切断する方法はありますか?

4

2 に答える 2

2

ストアのリッスンから退会する方法の例があります (公式の例から抜粋):

var Status = React.createClass({
    getInitialState: function() { },
    onStatusChange: function(status) {
        this.setState({
            currentStatus: status
        });
    },
    componentDidMount: function() {
        this.unsubscribe = statusStore.listen(this.onStatusChange);
    },
    componentWillUnmount: function() {
        this.unsubscribe();
    },
    render: function() {
        // render specifics
    }
});
于 2015-07-10T22:31:26.830 に答える
0

上記の例で何が起こっているかを考える 1 つの方法を次に示します。

var myFunc = function(){
    console.log("This gets fired immediately");
    var randomNumber = Math.ceil(Math.random()*10);
    return function() {
        return randomNumber;
    }
}

var a = myFunc(); //Console log fires IMMEDIATELY, a is the returned function

a(); //some integer from 1 to 10

変数に割り当てると myFunc が呼び出されるため、console.log がすぐに起動します。componentDidMount が発生するとすぐにリスナーを「オン」にします。

componentDidMount ライフサイクル メソッドでは、.listenを使用してリスナーをアタッチしています。それが呼び出されます。便宜上、関数の結果を this.unsubscribe に割り当てています。

この要点 ( https://gist.github.com/spoike/ba561727a3f133b942dc#file-reflux-js-L60-L68 ) の 60 ~ 68 行目を見ると、イベント リスナーを削除する関数を返す .listen を考えてみてください。

componentWillUnmount で、リスナーを削除する this.unsubscribe を呼び出します。.listen は「リスナー」を削除する関数を返すと考えることができ、componentWillUnmount ライフサイクルが発生すると、その関数を呼び出してリスナーを強制終了します。

Tl;dr: .listen がリスナーをアタッチし、リスナーをオフにする関数を返すと想像してください。最初にリスナーを呼び出すと、返された関数を呼び出すと、リスナーがオフになります。

于 2016-03-01T19:57:30.477 に答える