hrddd / poke-anagram

https://poke-anagram.vercel.app
0 stars 0 forks source link

ベース作り #3

Open hrddd opened 4 years ago

hrddd commented 4 years ago

jsonの追加とreducerらの追加

jsonはさておき、reducerの追加は面白かった。 空配列を置いた時に、typescriptで怒られたので、asを使い、型を教えてあげた。 そのほか、APIの返り値(json)の型を定義しておき、コード上で活用してみた。 ほぼほぼ画面をみることなく、ベースの作成ができた。 async(データのfetch)に関しては、実験すらしていない。コレが次のstep(jsoon読み込み)でいい感じにできていたら、TSすごい、ということになるだろう。 ただ、それを抜きにしてもTSを使用した開発は気持ちが良い。 考えるフローがコードに現れてくるようなイメージ。 空配列をおく時に、「コレはただの空配列じゃなくて、こんなデータが入ってくるやつと認識して書いている」を記述することができて、その後に書いたものは、インテリセンスもそれに対応してくれる。 妖精さんとかそんな感じだね。 後から見返した時、、、はもちろんなんだけど、書き味のよさ、が指示され続ける理由なんだろうなあと思ったりした

かかった時間

3時間

タイポの修正と悩みの時間

「poke」という名称をどこまで使うか悩んだ。 pokeDataを格納するところ、、、はいいと思っている(resourceはAPIと一対一でつくっとけばいいかな、、、って) uiでどこまでやるか、、、「anaglamPuzzle」というredux module, componentを作り、その中でもpokeDataの型を参照しているんだよなあ、、、 型にしか依存してないので、いいっちゃいいが、ポケモンじゃないバージョンとも切り替えたいときはどうするのだ、、、とか、、、 いや、、、コレはワナだ、、、失敗するために勉強しているんじゃないか、、、と思い直す。 逆にポケモンじゃないバージョンとの切り替えもマイルストーンに置くことを思いついた。 他にもわからんことはありすぎるので、一旦コレで良しとする。迷ってもしょうがない、、、(実装したことがなければ想像は正確じゃない)。 次はいよいよfetchを実装する

かかった時間

30分

redux-saga, redux-thunk の復習

やっぱどっちもナールほど、という感じがしない。 特にthunkはpayloadの型がfunctionになるのがきもい。 直感的ではあるけど、ネストが深くなりそうなのもなんだか、、 sagaはまだ分かる、、、けどなあ、、、なんかな、、、middleware封じ込めって感じが如何せん気に食わない。 middlewareにはデータ構造に関係しないヤツ、、、を入れたい気持ちがある。 要件が変わった時にコレって示したいよね。。。。と思ったが、うん、どれにしろmiddlewareで解決するじゃんね、と思い、どれでもいいかという感じがしてきた。 redux-effectsも良さげだし、hooksで書くのもいいとか書いてあるし でもreduxにはAPIはmiddlewareで受けとけとか書いてあるしなあ、、 どうしようかな。。。 悩んだら公式だ。 https://github.com/aikoven/typescript-fsa#redux-observable redux-observableに興味ニキかあ。。。

めんどくせえhooksだ(他のは後からやる)

4

かかった時間

1時間

ふと気になったActionのNamespace

namespace区切ってくれるとかやったーとか思ってたらそうじゃなかった(クソ) わざとActionの名前を被らせて実行してみる、、、両方とも反映されました(死) 推測よりも計測ですね(あと公式のdocumentみとけという)

かかった時間

15分

dispatchの基本的な話

dispatchで返すのはプレーンなobjectでなければいけない、、、(actionCreatorを返してはいけない、、、) asyncでやったら忘れてた。 必ず引数を与えてやらなければいけない、、、(方法あるかもだけど)

const actionCreator = actionCreatorFactory('pokeData');
export const fetchPokeData = actionCreator.async<string, PokeDex, string>("FETCH");
  useEffect(() => {
    // NG dispatch(fetchPokeData.started);
    // NG dispatch(fetchPokeData.started());
    // OK
    dispatch(fetchPokeData.started('Please Give Me Pokemons...'));
  }, [dispatch]);

かかった時間

15分

fetchでjsonを読み込む

TypeScriptでのエラーハンドリングが難しそうだった https://qrunch.net/@tommy/entries/N4RabinOf00WZXd8

どうにも理解できなかったので、公式参考にgetJSONで、、、 https://typescript-jp.gitbook.io/deep-dive/type-system/generics#dezainpatnnajenerikku ちょっとだけジェネリクス君が作れそうな気がしてきた

ちなErrorに関してアノテーションは使えない、、、とか。多分、Errorだけthrowされるとは限らないでしょ、、、ってことかな https://typescript-jp.gitbook.io/deep-dive/main/common-errors#kyatchinohaanotshonwotsukotohadekimasencatch-clause-variable-cannot-have-a-type-annotation

hooksに関して、配列を返しているんだけど、as constにしないとダメそげだった(型推論的に、まあ分かる)

['string', {'hoge': hoge}] // 3つ目には何が入るんだろうか?決められない → (string | {'hoge': hoge})[]
['string', {'hoge': hoge}] as const // ここで固定 → [string, {'hoge': hoge}] // 使える(呼び出したとこで指定できる)

かかった時間

4時間 (画面全く見ずに組めるのすごいかも)