2017-10-17 12 views
1

私はsetStateのコールバック関数を渡すのに2番目のパラメーターを使用しようとしていますが、サーバー側のレンダラーがこのパラメーターを完全に無視することがわかります。私はGatsbyを使用しています。これはサーバー側のレンダリングを使って静的なReactベースのサイトを構築しています。私のコールはonChangeハンドラであり、そして次のようになります。予想通りリアクションサーバサイドレンダラでsetStateコールバック関数が省略されていますか?

this.setState({ [event.target.name]: event.target.value },() => { console.log('setState callback') }) 

状態が更新されますが、コールバックが呼び出されることはありません。 :同じ問題は、私が最初のパラメータのためのオブジェクトや関数を渡すかどうかを適用します。成分関数は次のようになります。

ReactComponent.prototype.setState = function (partialState, callback) { 
    [...] 
    this.updater.enqueueSetState(this, partialState, callback, 'setState'); 
}; 

ReactUpdateQueue.jsに住んでいることアップデータの方法、(コールスタックに応じて)は次のようになります。

enqueueSetState: function (publicInstance, partialState) 

私は完全には理解していませんReactのプロセスをビルドしますが、そのメソッド/ファイルはソース内のthisファイルから来ていると信じています:

/src/renderers/shared/server/ReactPartialRenderer.js 
私は、この関数が定義されて見つけることができる

唯一の他の場所はhereです:

/src/isomorphic/modern/class/ReactNoopUpdateQueue.js 

enqueueSetState: function(
    publicInstance, 
    partialState, 
    callback, 
    callerName, 
) { 
    warnNoop(publicInstance, 'setState'); 
} 

正しいメソッドシグネチャのように見えますが、私は自分のコードでsetStateコールをデバッグするとき、コールスタック内のどこにも表示されません。これは、クライアント側でレンダリングされたReactコンポーネントの問題ではないようです(この問題を示すために単純なレポを設定しようとしますが、CodePenなどではレプリケートできません)。componentDidUpdate私は何をする必要があるか達成が、コールバックは、私のインスタンスではるかに便利である、と私は、このような未解決の謎を残して嫌いに。 :)

答えて

1

まあ、私はそれを考え出したが、あまりにも頻繁にそうであるように、これは自己が犯した誤りだった。ギャツビーが使用するデフォルトのインストールは、V15を反応させるのが、我々は16を使用していたので、我々は結果のパッケージに組み込まれてしまったpackage.jsonで、それへの直接の依存関係を追加しました。私はまだ上記のenqueueSetStateのバージョンが適切なものの代わりに呼び出された理由を理解していませんが、反応の参照を削除して(単にwebpackを新しいバージョンに指してほしいものを実行するgatsby-plugin-react-nextを追加する) 。

少なくとも、これはReactの勇気をもう少し詳しく知る良い言い訳でした。おそらく、これは将来他の誰かを救うでしょう。

関連する問題