私は親コンポーネントによってその小道具が設定されているコンポーネントを持っています。親コンポーネントは定期的に変更されますが、子コンポーネントの小道具は変更されません。小道具と状態が変わっていなくても、Reactコンポーネントがレンダリングされる原因は何ですか?
しかし、子供はレンダリングを続けていますが、理由を理解できません。
shouldComponentUpdate(nextProps, nextState) {
console.info(JSON.stringify(nextProps)+JSON.stringify(nextState));
console.info('NEXT PROPS ====================');
for (var n in nextProps) {
if (!nextProps.hasOwnProperty(n)) continue;
console.info(n + ' = ' + (nextProps[n] === this.props[n]));
}
console.info('NEXT STATE ====================');
for (var n in nextState) {
if (!nextState.hasOwnProperty(n)) continue;
console.info(n + ' = ' + (nextState[n] === this.state[n]));
}
return true;
}
これは、コンソールに次のように出力されます::小道具や状態は、私はこの機能を追加しました変更されていないことを確認するには
{"autocomplete":null,"value":"","theme":1,"style":{"width":1426,"height":783},"label":"","description":null,"visible":false,"buttons":null,"inputType":null}{"visible":false,"answer":""}
NEXT PROPS ====================
autocomplete = true
value = true
theme = true
style = true
onClose = true
label = true
description = true
visible = true
buttons = true
inputType = true
NEXT STATE ====================
visible = true
answer = true
{"autocomplete":null,"value":"","theme":1,"style":{"width":1426,"height":783},"label":"","description":null,"visible":false,"buttons":null,"inputType":null}{"visible":false,"answer":""}
NEXT PROPS ====================
autocomplete = true
value = true
theme = true
style = true
onClose = true
label = true
description = true
visible = true
buttons = true
inputType = true
NEXT STATE ====================
visible = true
answer = true
だから、次の状態への1つの呼び出しからと小道具は厳密に等しいが、このコンポーネントのrender()関数が呼び出され続ける。このshouldComponentUpdate()はテストのためのものであり、私がそれを削除した場合、render()も同じ条件のもとで呼び出され続けることに注意してください。
これを引き起こす原因は何ですか?
子コンポーネントは、子コンポーネントの小道具が同じままであっても、親コンポーネントが更新される場合に再レンダリングされます。子の再レンダリングを避けたい場合は、単にshouldComponentUpdateメソッドから 'false'を返します。 –