2019/07/27
State
の初期値にしたい時は、useEffect
を使うSkeban v0.1.0を先日リリースしました。
個人利用のみに対象を絞ったElectron製カンバンアプリです。
一般的なカンバンの使い方であるTodo管理や、ちょっとした情報の整理にどうぞ。
なんとなくアカウント不要のカンバンが欲しかったからです。
どうせ作るならMITライセンスのOSSにしようと思い、OSSとなりました。
インストーラーをダウンロードしてインストールしたら完了です。
Mac版に関しては、私がMacを持っていないためインストーラーを生成出来ませんでした。
ですので、以下のコマンドでGithubからソースをクローンしてパッケージ化を行ってインストーラーを作成してください。
git clone https://github.com/roottool/Skeban.git
yarn install
yarn run build
yarn run pack:mac
今回はcreate-react-appを使わず、webpackとbabelの設定を自分で行いました。
理由は、今までwebpackとbabelの設定を行ったことがなかったので経験値を積むためです。
しかし、create-react-appのお手軽感を改めて実感することになりました…。
D&D実装は、react-beautiful-dndを使用しました。
unstated-nextは、Reduxのようなアプリ全体での状態管理を行うことが出来るパッケージです。
Reduxと違う点は、Reactに実装されているReact Hooksのみで書けることです。
今回のアプリ作成に限って言えば、ReduxではおなじみのReducer
、Dispach
やAction
を書いていません。
React HooksのuseState
で作成した状態更新関数だけでアプリを作成出来ました。
indexedDBは、ブラウザに搭載されているDBです。
ラッパーのDexie.jsを使用しました。
DBからのレコード取得が非同期であるため、useState
の引数にasync関数を作って返り値にDBからの取得結果を初期値としていました。
ですが、PromiseとuseState
で設定していた取得結果の配列型との型不一致エラーとなってしまいました。
そこで、状態のマウント時とアップデート時に実行されるuseEffect
で解決しました。
これは。useEffectをUpdateタイミングのみで使いたいというstackoverflowの回答を利用しています。
マウント時のタイミングで、DBからのレコード配列をuseState
で作成した状態更新関数で状態更新を行いました。
localStorageを使ってみたり個々のコンポーネントのStateだけで作れないかと色々模索していましたが、今の形に落ち着きました。
Skebanをよろしくおねがいします。