- Published on
ComponentDidMountをuseEffectで代用する方法
React.jsでcomponentDidMount
をUseEffect
で代用する方法を紹介します。
componentDidMount
をUseEffetct
で代用する方法はとても簡単です。
例えば、下記のようなcomponentDidMount
は、空のtitleをstateにもち、componentDidMount
で(componetがmountされた時に)titleに値を入れて、それをrenderするような例です。
import React, { Component } from 'react' class Home extends Component { state = { title: ''} componentDidMount() { this.setState({title: 'component did mount'}); } render () { return ( <h1>{this.state.title}</h1> ) } } export default Home
これをuseEffect
で表示するとこうなります。
import React, { useState, useEffect } from 'react' const Home = () => { const [title, setTitle] = useState('') useEffect(() => { setTitle('useEffect title') }, []) return ( <h1>{title}</h1> ) } export default Home
ポイントは useEffect(() => { }, [])
の[]
の部分です。これをuseEffectの第二引数に渡すことで、
更新時には更新されずに無限ループのようにひたすら更新し続けられるというのを避けることができます。
そもそも、第二引数の値が更新(変更)された時に、useEffect
が利用されるような仕様になっています。
今回、[]
と空でかつ定数の配列を渡しているので、更新されずに最初の一度のみ実行されます。
それにより、componentDidMount
と同じような動作をこれをやることで可能となってきます。