2017-01-12 1 views
1

私はReduxで、そしてmapDispatchToProps関数でReactアプリケーションを構築しています - 私は以下のパターンを使用しています。Javascript関数Argumentsオブジェクトは現在のwebpackモジュールに魔法のようになりますか?

const mapDispatchToProps = (dispatch) => { 
    debugger 
    Object.keys(actions).forEach(key => { 
    var functionObj = actions[key]; 
    actions[key] =() => { 
     debugger 
     var zz = Array.prototype.slice.call(arguments); 
     dispatch(functionObj.apply(null,zz)); 
    } 
    }); 

    return actions; 
} 

私にバナナを駆動するargumentsオブジェクトということですいただきましたが、私はそれが私がどのような方法でそれを「使用」する場合を除き、(パラメータのblaのblaを持つオブジェクトのような配列)であることを期待するものです。 「使用」とは、

(これは上記のvar zzなど)に割り当てるか、関数に渡します。私が引数オブジェクトを "使用"すると、現在のWebpackモジュールが魔法のようになります。

これについて誰かが知っていますか?私は狂ってる?

答えて

3

これは、矢印機能do not provide an arguments objectが原因で発生します。したがって、最も近い矢印以外の機能であるmodule wrapper functionを参照しています。

代わりにrest parametersを使用して修正できます。良いリズム!残りのパラメータは真の配列なので、Array#slice()ナンセンスで変換する必要はありません。

以下は、特別なthis値を必要としないため、Function#apply()の使用を避けるためにspread operatorを使用した例です。

const mapDispatchToProps = (dispatch) => { 
    debugger 
    Object.keys(actions).forEach(key => { 
    var functionObj = actions[key]; 
    actions[key] = (...zz) => { 
     debugger 
     dispatch(functionObj(...zz)); 
    } 
    }); 

    return actions; 
} 
+2

0mg。ダー。あなたは口に巨大なキスをする必要があります。あなたは選択肢がありません、ここで乗り換えてください。 –

+2

私は知っている、それは直感的に直感的ではない。残りのパラメータは最終的に第2の性質になり、我々は '議論'とそのすべての嫌悪感を忘れるだろう。 –

+0

私はあなたに敬意を表する!確認された作品。 2分で回答を受け入れるでしょう –

関連する問題