🙌

React component パフォーマンスの最適化(二):不要な再レンダーを避けるように

2024/05/25に公開

親コンポーネントが更新された場合は、子コンポーネントはそれに伴って更新されるようになります。それは reactコンポーネントの更新機能です。

そのような考えははっきりしていますが、子コンポーネントが何も変わらなくても再レンダーを起こす場合があります。

どうやって不要な再レンダーを避けますか。

フックメソッドの shouldComponentUpdate(nextProps,nextState)を使うのはお勧めです。

class Hello extends Componennt {
    shouldComponentUpdate(nextProps,nextState){
        //条件により、再レンダーかどうか決めます
        return false
    }
    render() {...}
}

shouldComponentUpdate()メソッドには二つの引数があります。nextPropsは最新のpropsで、nextStateは最新のstateです。

他には、メソッドのブロック内では「this.state」プロパティを使って、更新した前のステートを取得できます。
「this.state」と「nextState」を比較するのを通じて、当コンポーネントがアップデートするかどうか判断できます。
下記のコードをご参照ください。

class Hello extends Componennt {
    shouldComponentUpdate(nextProps,nextState){
        if(nextState === this.state){
            // stateは変わらない、更新必要がない
            return false
        } else {
            // stateは変わった。更新必要がある
            return true
        }  
    }
    render() {...}
}

Discussion