私はReduxコードベースを継承しました。Reduxの基本ルールに違反するコードの一部が見つかりました。Reduxレデューサーの誤用による現実的な影響?
具体的には、そこtracking
減速だと、それは次のようなものになります。これは明らかに間違っている
function tracking(state = {}, action) {
function sendEvent(event, data) {
// API call here to send a tracking event
}
switch (action.type) {
case TRACK_FRIEND_REQUEST:
sendEvent('track-friend-request', action.payload);
return state;
case TRACK_LINK_CLICK:
sendEvent('link-click', action.payload);
return state;
}
}
を。状態は無意味であり、その副作用のためだけに存在します。正しいソリューション(IMO)は、meta
プロパティでアクションをリッスンするtracking
ミドルウェアを作成し、これらの特殊なトラックイベントを作成する代わりに、実際のイベントにmeta
プロパティを割り当てます。
驚いたことに、私はこのように使用しても実際の結果は見つからず、なぜそれを修正する努力が必要なのか正当化するのは苦労しています(これらの多くの追跡イベントがありますそれは仕事のかなりのビットです)。
私が見る唯一の潜在的な問題は、devtoolsを使用すると、アクションをトグルするたびにイベントが再送信されることです。ただし、devモードでのトラッキングアクションは既に無視されているため、これは問題ではありません。
このコードが私が気づいていない現実世界の問題を引き起こす他の理由はありますか?
私が想像できる唯一の問題は、新しい開発者がこのコードベースに飛び乗ると、APIコールの応答に応じていくつかの状態変更機能を実装できることです。あなたが指摘したように、これは単なる還元の悪用です。ミドルウェアは道のりです。 –
合意して、私は、これを守るためにこの減速機を「非難する」というコメントを追加するつもりだと思う。ありがとう! –