1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React setState() データ同期&非同期の書き方

Last updated at Posted at 2022-01-08

データ非同期更新

setState()のデータ更新は非同期です。

同じスコープ内にsetState()を複数回呼び出されたも、render()は一回しか呼ばされないです。

//非同期更新
handleClick = () => {
        this.setState({
            count: this.state.count + 1
        })

        console.log('first', this.state.count)  //1

        this.setState({
            count: this.state.count + 1
        })

        console.log('second', this.state.count)  //1
        
    }

データを同期更新させる方法

setState((state,props)⇒{}) を使用することです。

 ・state: 最新のstate

 ・props: 最新のprops

handleClick = () => {
        this.setState((state, props) => {
            return {
                count: state.count+1
            }
        })

        this.setState((state, props) => {
            console.log('second',this.state) //2  
            return {
                count: state.count+1
            }
        })

        console.log(this.state.count) //1 これを先にプリントする

    }

setState()の第二引数

setState(updater[,callback])

UIレンダリング後に、setStateの第二引数callbackを直ちに実行します。

handleClick = () => {
        this.setState(
            //第一引数 updater
            (state, props) => {
            return {
                count: state.count+1
            }
            },
            
             //第二引数 callback
            () => {
            console.log(document.title)
        }
        )
    }

コンポーネント更新の仕組み

setState() の役割は大きく二つに分けられます。

1. stateの更新

2. コンポーネントの更新

コンポーネントを更新する際に、子要素のコンポーネントしか更新しません。

兄弟や親のコンポーネントは更新しません。

beforeUpdate.jpg

黄色部分は更新するところ

黄色部分は更新するところ

注意すべきところ

レンダリング必要あるのデータだけ、stateに入れますが、

レンダリング必要ないデータはthisに入れます。

stateのデータが多ければ多いほど、renderの性能が低下してしまいます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?