mapDispatchToPropsが呼び出されるたびに、新しい関数を生成して返します。たとえば:mapDispatchToProps関数のため、接続されたReact PureComponentを再レンダリングしないようにするにはどうすればよいですか?
const mapDispatchToProps = function(dispatch, ownProps) {
return {
addToStack: (episodeId, stackId) => {
return dispatch(StackAction.addEpisodeToStack(episodeId, stackId));
},
};
}
mapDispatchToPropsが呼び出されるたびに、それは新しい矢印機能で、新しいオブジェクトを生成します。
私のアプリケーションでは、コンポーネントを再レンダリングしないでください。 PureComponentを使用することがしばしばあります。しかし、関数は常に異なるので、PureComponentは役に立たず、shouldComponentUpdate戦略を作成する必要があります。そこでは、mapDispatchToProps関数のすべてを「ブラックリストに登録」してそれらのすべてを無視する必要があります。私は再レンダリングを避けるために、リストにすべての新しい関数を追加する必要があります。
const blacklist = [
'addToStack',
]
shouldComponentUpdate(nextProps, nextState) {
for (let i in nextProps) {
if (blacklist.includes(i)) continue;
if (nextProps[i] !== this.props[i]) {
return true;
}
}
for (let i in nextState) {
if (nextState[i] !== this.state[i]) {
return true;
}
}
return false;
}
私は新しいソリューション
const dispatch;
const mapDispatchToPropsFunctions = {
addToStack: (episodeId, stackId) => {
return dispatch(StackAction.addEpisodeToStack(episodeId, stackId));
},
};
const mapDispatchToProps = function(dispatchArg, ownProps) {
dispatch = dispatchArg
return mapDispatchToPropsFunctions;
}
機能が一定であると再トリガされませんこの方法で作ってみた:ここ
はブラックリストshouldComponentUpdateの定型の一例ですPureComponentのレンダリングで、shouldComponentUpdate関数を維持する必要はありません。しかし、これは私にとっては間違っているようです。 この問題に対処する "デフォルト"の方法はありますか?
を反応させるのドキュメントによると、「更新がへの変更が原因で発生することができ小道具や状態。 mapDispatchToPropsで再レンダリングが実行されていると思いますか?さらに、あなたが状態変化を求めていない場合、なぜあなたはアクションをディスパッチしていますか? – jmargolisvt
@jmargolisvt私の例では、mapDispatchToPropsが呼び出されると、addToStackの小道具は別の機能になります。 –
@jmargolisvtので、再レンダリングはmapDispatchToPropsではなく、mapDispatchToPropsが呼び出された結果発生します。アクションをディスパッチすると必ず更新される可能性がありますが、ここでアクションをディスパッチすることについては言及していません。 –