Reactの環境構築
npx create-react-app my-app
cd my-app
npm start
-
- すでに空のgit用のフォルダがある場合は
npx create-react-app .
でいいっぽい- githubの環境作りのメモは以下
- GitHubのリポジトリを作るときに参考にしたサイト
-
npm start
するとreactアプリケーションがビルドされローカル環境が構築されhttp://localhost:3000
で動作検証可能 - vue.js(vue-cli)だとオプションを設定するがreactは不要
- すでに空のgit用のフォルダがある場合は
react create appで作られるもの
- react create appだと以下内容がデフォルトで含まれているらしい
- JSX変換処理や最新のJavascript記法を以前のブラウザでも使えるようにするトランスパイル処理(Babel?)
- ソースファイルを1個の*.jsにまとめるバンドル処理
- ファイルの変更件シュルト自動再トランスパイル、ブラウザの自動リロード
- コードエラーの実行前検出(ESLint)
- 実行時に発生したエラーをブラウザ上でわかりやすく表示
- 本番環境用のソースコード圧縮・最適化
- TypeScriptを使いたい場合は以下コマンド
npx create-react-app my-app --template typescript
デバッグ環境の作成
VS Code上でやる方法
-
参考:VSCodeでReactをデバッグする方法- これは古い方法。Debugger for Chromeを入れようとしたら、deprecatedになっていた
- VS Code標準?のdebugツールででできた。
ブラウザ上でやる方法。
- 参考:Reactアプリのデバッグ方法
-
React Developer Tools
を入れる
-
不明点の雑メモ(体型的に勉強していないので、バラバラと書いてく)
TypeScriptを採用したら、型の指定をしないとエラーになって困った
- type scriptを利用する場合、型を指定しないと
暗黙のanyのエラー
が発生します- 型の指定は引数で
変数: 型
と指定すれば解決する。最悪変数: any
で解決する(やってはいけない)
- 型の指定は引数で
React×TypeScriptの時、型の指定ってどこでするのが正しいん???
- 関数型コンポーネントの引数(Props)の型の指定をどこでするべきか
- 参考:【初心者】React × TypeScript 基本の型定義
- この人は関数コンポーネントとかの外側で定義してる(使いまわすならそうか。可読性的にもそうか)
関数コンポーネントの引数への引き渡しでオブジェクトで渡し方がわからん!!配列とか詰むやんけってなった時の解消法
const HogeComponent = (props:LoginUser) => {
return <div> hello {props.name}! your nickname is {props.nickname}!!!!
}
//...(略)...
< HogeComponent loginUser={loginUser}> // ここをオブジェクトで一気に渡したい
- 参考:React(TypeScript)のコンポーネントにオブジェクトを直接渡したい
-
スプレッドして渡してください
ってなってるけど、オブジェクトをfoo={...hoge}
とするとarrayじゃなきゃ使えないぜ
って怒られる-
foo={...hoge}
→{...hoge}
にしたら解決した。変数指定した時点でPropの一要素として割付けしようとするので、fooがarrayじゃないってなって怒られるっぽい?
-
TypeScriptの型定義のtypeとinterfaceの違い
- 参考:interfaceとtypeの違い、そして何を使うべきかについて
- `公式ドキュメントでもinterfaceのほうが拡張にオープンなJavascriptのオブジェクト動作方式に似ているという理由でinterfaceをおすすめしています``
ReactVFCってなんぞ?
- 参考:【検証】React.FC と React.VFC はべつに使わなくていい説
- Reactのコンポーネントには3種類存在する
- JSX.Element型
- React.FC型
- React.VFC型
- 3つあるが
基本的には () => JSX.Element のままでOK
らしい -
FC / VFC は非推奨とは言わないまでも、Github上の議論の中で積極的に使うべきではない傾向にあるということが分かりました
らしい - 細かくはサイト内を見るべし(今回の主題じゃないので読み飛ばしました)
- Reactのコンポーネントには3種類存在する
- ReactVFCは型定義を行う際に便利な型っぽいので、TypeScriptを使う上ではほぼ必要ないっぽい
関数コンポーネントならぬ、クラスコンポーネントってやつもあるらしい
- ほとんど関数コンポーネントで賄えるので今は使われていない
UseEffectとは?
- 参考:副作用フックの利用法
useEffect は何をやっているのか? このフックを使うことで、レンダー後に何かの処理をしないといけない、ということを React に伝えます
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
// Update the document title using the browser API
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
API呼び出しはどうやってやる?
・axiosという3rd Partyのアプリを使用する方法
・JavaScriptのfetchメソッドを使う方法
-
参考:【リソース取得APIの比較】fetchとaxiosの4つの相違点
- axiosのほうが良さそう(モダンなリクエスト用のライブラリっぽい)
-
npm install axios
したらエラーが出るようになったぞ・・・!-
npm audit
すると jestとかnode, reactがmissingって言われる - axiosに対応のライブラリがデフォだと入ってないのか?それともaxiosのinstall時に何か起きてるのか?何かが悪さをしていると思うが・・・(そのうち調べる)
- 元々バージョン意識してなかったし
npm david
に頼ってみるnpm install david -g
david update
- これをやっても肝心なreactが見つからねえってなった。調べてるとReact: missing script: startという記事が出てきて、yarn.lockファイルが悪さをしてるっぽいことがわかった。yarnを利用しているわけでもないので指示通りに
npm uninstall -g yarn
で消してみたら解消(おそらくパッケージ管理の設定ファイルとかを変えなきゃいけないんだろうけど、そこら辺わからないので消す手段を取る) - というか本当はyarnが入っていて、恐らくyarnで管理する設定になっていたので
yarn add axios
で導入する必要があったと思われる
-
-
axiosの方が3rd party製のライブラリなので、導入が必要となるがAPIリクエスト用のライブラリなので、色々と便利なはず
axiosのレスポンス構造
- 参考:axiosのgithubのReadme
- data:Object
- status:number
- statusText:string
- headers:Object
- config:Object
- request:Object
axiosのパラメータ指定方法
- 参考:axiosのパラメータ指定方法まとめ
- QueryString
- URLに直接つけるか、optionとして以下のようにつけること可能
- QueryString
axios.get('/xxx', {
params: {
querystringparam: aaaaa
}
});
axiosで取得したデータがdoes not exist on type 'never'.
って怒られるで
- TSを使っている関係で型定義をしなきゃならんの。。。。? なのでTSでのaxiosの使い方を調べた方が良さそう
- 参考:APIをリクエストするCustom HooksをTypeScriptで書いてみよう
- 恐らくレスポンスに合わせて型定義をしてあげる必要がありそう!
- レスポンスの型定義をして、初期値をnullにしたら
Type 'null' is not assignable to type 'IXXXX'
って怒られた- 参考:https://stackoverflow.com/questions/59715119/type-null-is-not-assignable-to-type-t
- tsconfig.jsonで
strictNullChecks
をoffにするか - nullも入るよって宣言してあげればいいらしい
XXX | null
みたいな感じ
- tsconfig.jsonで
- 参考:https://stackoverflow.com/questions/59715119/type-null-is-not-assignable-to-type-t
axiosで取得したデータをHTMLに描画しようとしたらObject is possibly 'null'
って怒られました
- 参考:TypeScriptで "Object is possibly null" と怒られたときにすること
- TSはnullの可能性があると怒られるので事前に検証するnullチェックが必要
reactでパラメータによってHTMLの表示非表示を制御したい
- 以下みたいな感じでreturnする前にパラメータの値をチェックしてif文で制御すれば良さそう
if(param) {
return (
<div> あるよ </div>
)
} else {
return (
<div> ないよ </div>
)
}
↓TODO↓
↑TODO↑
複数コンポーネントを跨いだ状態管理ってどうやんの?
- 参考: Software design 2021/8号
- 大規模プロジェクトなら
Redux
- 中・小規模なら
Context API
- 小規模なら
useReducer
- 大規模プロジェクトなら
- vueで言うとvuex