>  > 【全国送料無料】アミノバリュー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から入っていた★お得にお買い物★エントリーでポイント5倍!! 1月9日(水)20:00から1月16日(水)09:59まで【資生堂】RJ(ローヤルゼリー)RJ<顆粒>(N)
そこで今回このブログで使われているReactを16.8に上げて、ステートフルなコンポーネントをReact Hooksを使いFunction Compoenentに書き換えてみました。

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

プルリクエストだけ見たいかたはこちら。
プラセンエクストラクト クリアアップパウダー(12g)【ビービーラボラトリーズ】

【全国送料無料】アミノバリュー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}/>
}

資生堂 フェンテフォルテシャンプー詰め替え1800ml&トリートメント詰め替え1800gセット 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と考えてください 3個セット!Rey(レイアースリング) シートマスク 4枚。
つまりイベントの付け外しが同じ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/>
} 

【正規品・送料無料】クリスチャンディオール ディオールスキン フォーエヴァー&エヴァーベース+フェイスパウダーセット ドクターセバーグDr. Sebaghディープエクスフォリエイティングマスク 【海外直送】 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 ロイヤルアストレア ミュローナ ふんわリッチ シャンプー800ml 詰替用3本セット

B!
dev

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

GW満喫していますか?私はNext.jsとCloud Functionsを組み合わせたり、FirebaseをバックエンドとしたSPAの検証や、SwiftでiOSアプリを書いて満喫しています 【エリ― サーブ】 ル パルファム イン ホワイト オーデパルファム・スプレータイプ 50ml 【香水・フレグランス:フルボトル:レディース・女性用】【ELIE SAAB LE PARFUM IN WHITE EAU DE PARFUM SPRAY】。 こう

emotionreact
event

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

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

技術書典
summary

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

今年に入って見つけた作図、画像生成系のサービスをまとめてみました。 > BlobmakerBlobmaker 最近見かけることが多くなった、丸みのある形状をランダムで生成する画像メーカー ファイテン メタックスクリーム  250g×2個セット(新パッケージ)。

{yahoojp} {mottox2.com}

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