>  > 【全国送料無料】アミノバリュー4000 500ml Lボトル 3ケース(72本)セット+【非売品】アミノバリュー スポーツタオル【フィットネス-サプリメント/201712p】

【全国送料無料】アミノバリュー4000 500ml Lボトル 3ケース(72本)セット+【非売品】アミノバリュー スポーツタオル【フィットネス-サプリメント/201712p】

ブログのReactを16.8にあげてReact Hooksで書き換えてみた

devjavascriptreact

2019/02/06にReact16.8がリリースされ、16.7のalphaから入っていた【エンチーム】【毎日ポイント2倍】美・プレミアムPCN25000 150カプセル ※お取り寄せ商品【RCP】
そこで今回このブログで使われているReactを16.8に上げて、ステートフルなコンポーネントをReact Hooksを使いFunction Compoenentに書き換えてみました。

React Hooksの解説をした記事はたくさんあると思うので、今回は書き換えてどう変わったかを見ていきましょう。
該当する部分はHeaderの検索フォームです。

プルリクエストだけ見たいかたはこちら。
□送料無料・ポイント5倍□アサヒフードヘルスケア シュワーベイチョウ葉エキス 60日分(180粒) 【機能性表示食品】

【全国送料無料】アミノバリュー4000 500ml カールアイロン Lボトル 35 3ケース(72本)セット+【非売品】アミノバリュー スポーツタオル【フィットネス-サプリメント/201712p】

【全国送料無料】アミノバリュー4000 3ケース(72本)セット+【非売品】アミノバリュー Lボトル Lボトル 500ml スポーツタオル【フィットネス-サプリメント/201712p】 500ml

これはいろんな記事で言及されているuseStateを用いて書き換えます。
useStateに初期値を引数として与えると、値と更新用の関数が返ってきます。

js
const NewComponent = props => {
 const [query, updateQuery] = useState('')
 const handleInput = (e) => {
 updateQuery(e.target.value)
 }
 return <input onChange={handleInput}/>
}

アルインコ ヨガマット (ピンク) WBY701P【納期目安:3週間】 componentDidMountの書き換え

書き換え前のClassComponentです。主にデータの取得とキーボードイベントのつけ外しです。
コンポーネントの各所に処理が散らばってて可読性が低い状態です。

js
class OldComponent from Component {
 async componentDidMount() {
 const res = await axios.get('/search.json')
 this.setState({ data: res.data })
 this.focusShortcutHandler = this.focusShortcut.bind(this);
 window.addEventListener('keydown', focusShortcutHandler)
 }
 componentWillUnmount() {
 window.removeEventListener('keydown', focusShortcutHandler)
 }
 focusShortcut(e) {
 if (e.keyCode === keyCodes.SLASH && !this.state.isActive) {
 this.focusInput()
 e.preventDefault()
 }
 }
}

useEffectで書き換えると以下のようになります。
useEffectはcomponentDidMount, componentDidUpdateのタイミングで呼ばれて、returnで返した関数がcomponentWillUnmountのタイミングで呼ばれるHookと考えてください まるかん☆ゴッドハートダイエットJOKA青汁。
つまりイベントの付け外しが同じHooksの中で操作出来るので、以前は散らばっていた同じような処理がまとめられ読みやすくなっていると思います。

また、axiosでデータ取得を行っている部分はコンポーネントがマウントされたタイミングでのみ実行したいので第2引数に[]を渡しています。(第2引数は監視したい値を配列で渡す。この場合変更を監視しないという意味でから配列を渡している)

useEffectに関してはReactの公式ドキュメントに詳しく書いてあるので読むといいでしょう。
https://reactjs.org/docs/hooks-effect.html

js
const NewComponent = (props) => {
 useEffect(() => {
 axios.get('/search.json').then(res => {
 updatePosts(res.data)
 })
 return undefined
 }, [])
 useEffect(() => {
 const focusShortcut = (e: KeyboardEvent) => {
 if (e.keyCode === keyCodes.SLASH && !isActive) {
 inputEl.current.focus()
 e.preventDefault()
 }
 }
 window.addEventListener('keydown', focusShortcut)
 return () => {
 window.removeEventListener('keydown', focusShortcut)
 }
 })
 return <div/>
} 

ビスカアガリクスエキス顆粒 60包 トキワ漢方製薬 【上下側生地のみ】 ホロフィル中綿使用完全分割 着脱式 洗える敷布団用 上層・下層 中綿部分のみシングルサイズ(100×205cm)【洗える寝具 洗える布団 敷き布団 洗えるふとん】【RCP】532P26Feb16 prevStateを利用するcomponentDidUpdateの書き換え

Hooksの公式Q&Aにもある内容ですが、prevStateとstateを比較して処理を行う部分があってその書き換えにusePreviousというCustom Hooksを利用しました。

もともとのコードがあまり綺麗でないのはご愛嬌…

js
const usePrevious = (value) => {
 const ref = useRef(null)
 useEffect(() => {
 ref.current = value
 })
 return ref.current
}
const NewComponent = () => {
 const inputEl = useRef(null)
 const prevMobileShow = usePrevious(props.isMobileShow)
 if (prevMobileShow !== props.isMobileShow) {
 window.setTimeout(() => {
 inputEl.current.focus()
 }, 10)
 }
 return <input ref={inputEl} />
}

js
const filterPosts = (posts, query) => {
 return posts.filter(item => {
 const itemString = `${item.title} ${item.tags.join('')}`.toLowerCase()
 if (!(itemString.indexOf(query) > -1)) {
 return false
 }
 return true
 })
}
const NewComponent = (props) => {
 const [query, updateQuery] = useState('')
 const [posts, updatePosts] = useState([])
 const filteredPosts = useMemo(() => filterPosts(posts, query), [posts, query])
 return <div />
}

React公式のスタンスとしては、React Hooksへの利用を強制するようなものではない…1としているので今まで通りの書き方を続けてもいいが、ぜひReactユーザーにはHooksを触って欲しいと思いました。

  1. You don’t have to learn Hooks right now. Hooks have no breaking changes, and we have no plans to remove classes from React. https://reactjs.org/blog/2019/02/06/react-v16.8.0.html お得な3個セット”ウコンばくだん、長寿長野県健康館、1)秋ウコン、2)春ウコン、3)紫ウコン、4)白ウコン、5)黒ウコン、6)くすりウコン(クルクミン)➕肝臓エキスを追加しました!  クリックポスト便送料無料

B!
dev

ReactのUIコンポーネントライブラリに「Sancho UI」はいかが?

GW満喫していますか?私はNext.jsとCloud Functionsを組み合わせたり、FirebaseをバックエンドとしたSPAの検証や、SwiftでiOSアプリを書いて満喫しています 【最大600円クーポン 】【送料無料】【x5個】【国内正規流通品】ウエラ レジスト ストレングスニング シャンプー 1000ml ハートアップケア エイジライン 《エイジングケア 美容室 WELLA ウエラ シャンプー 美容室専売 サロン専売品 shampoo》。 こう

emotionreact
event

技術書典6にサークル参加したけど反省点が多すぎた

前回に引き続き、技術書典6にサークル主として参加させていただきました。 技術同人誌界隈はかつてない盛り上がりを見せており、今回のサークル当落発表の際は地獄のようなタイムラインになっていました。そうい

技術書典
summary

最近見つけた気になる作図系Webサービス3選

今年に入って見つけた作図、画像生成系のサービスをまとめてみました。 > BlobmakerBlobmaker 最近見かけることが多くなった、丸みのある形状をランダムで生成する画像メーカー 【送料無料】シャネル ブルー ドゥ シャネル 50ml EDP SP [CHANEL オードパルファム 香水 フレグランス]。

{yahoojp} {mottox2.com}

{yahoojp}jpprem01-zenjp40-wl-zd-3663