もっとも簡単な解決策は、setState
をcomponentDidMount
に入れるだけです。あなたはとにかく再レンダリングが必要なので。単純なコンポーネントの場合、再レンダリングはそれほど高価ではありません。
しかし、コンポーネントの構造が複雑で子どもの中には計算が必要なものがある場合は、shouldComponentUpdate
(または単にPureComponent
)を子コンポーネントに実装することをお勧めします。
もう1つの解決策は、実際のDOMを直接操作することです。それは汚れて見えますが、あなたは最高のパフォーマンスが(あなたが不要なレンダリングコンポーネントやDOMの更新がないことを保証することができます)を取得
あなたのコンポーネントが更新され、その高さを変更している場合、あなたはクラス名を更新することに注意
componentDidMount() {
const height = getHeight()
const div = document.getElementById('yourDivId')
if (height > MAX_HEIGHT) {
div.className = 'greater-than-max-height'
} else {
div.className = 'less-than-max-height'
}
}
、あなたはそのための機能を抽出することができ
(両方のソリューションがする必要がある)componentDidUpdate
でこれを行うためにも必要があります:
updateDivClass() {
const height = getHeight()
const div = document.getElementById('yourDivId')
if (height > MAX_HEIGHT) {
div.className = 'greater-than-max-height'
} else {
div.className = 'less-than-max-height'
}
}
componentDidMount() {
this.updateDivClass()
}
componentDidUpdate() {
this.updateDivClass()
}
あなたはまだ、とにかく再レンダリングする必要がある、またはどのようにあなたが 'レンダリングすることができますあなたが望むclassNameを使ってdivを付けてください – CodinCat
はい、bどのようにそれを行うには? 'componentDidMount'で' setState'を行うのが唯一の方法ですか? –
これは私が想像できる唯一の方法です、もっと良い解決策があるかもしれません。 – CodinCat