0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React】たにぐちまことさんのReact入門備忘録

Posted at

はじめに

たにぐちまことさんのReact入門を拝見させていただきましたので、自分なりの備忘録としてまとめました。とてもためになる動画を配信していただき、ありがとうございます。

基本事項

  • sampleという名のReactのプロジェクトを作成
    $ npx create-react-app sample

  • サーバを起動
    $ npm run start
    $ npm startでも良い。これは上記のエイリアス。)

  • babelがないとJSXが使えないが、create-react-appすればJSXが使えるようになる

  • JSXでは、class属性は、className と書かなければならない

  • JSXの中でJavaScript部分の変数や関数を使う場合は、{}で囲えば良い

  • JSXで属性値にJavaScript部分の変数や関数を設定する時は、""は不要。{}で囲むだけで良い

  • Bootstrap などを使いたい時は、プロジェクトディレクトリ -> public -> index.html にCDNをおけば良い。これがテンプレートだから。ゆえに、これの body -> divタグ の中にJSXで書いたものが入れ込まれる

  • src -> Apps.js の内容が実行される

  • Apps.js に次のインポート文を追加する
    import React from 'react’;

コンポーネント

  • React.Componentを継承したクラスが、コンポーネントとなる

  • コンポーネントを使う時は、<Hoge /> のようにする

  • コンポーネント中で次のメソッドが返す値が画面に出力される
    render() { return 出力する内容をJSXで書いたもの }

  • 出力内容にタグの入れ子がある場合は、()で内容全体を囲う必要がある

  • タグを並列して出力はできない。一番外側を一つのタグで囲む(例えば<div>)

ステート

  • Reactがステートを監視してくれて、setState()を呼び出すと、Reactが自動的に画面を書き換えてくれる

  • ステートは、コンポーネントのコンストラクタ内で次のように定義する
    this.state = {fuga : foo};

  • コンストラクタの引数に、例えばpropsを渡す

  • コンストラクタでは、最初にsuper(props);を記述する

  • コンポーネントのメソッドでsetState()を使うなら、コンストラクタの中でメソッドをバインドする。
    this.bar = this.bar.bind(this);

ルーティング

  • URLを変更した時にどういう動きをするかを決める機能をルーターなどと呼ぶ

  • ルーターの機能をインストール
    -% npm i -S react-router-dom
    - npm -> Node Package Manager(Node.jsのパッケージ管理)
    - i -> install
    - -S -> --saveのショートハンド

  • ルーティングのAppの中、記述方法が変わっている模様

    • $ npm list --depth=0でreact-router-domのバージョン確認
    • react-router-dom@6.26.0 v6だった
    • 記述を変更
      • <Route><Routes></Routes>で囲む
      • exact を削除
      • component部分 を element={<Home />} に変更

  • Link

    • Reactでは、<a>タグの代わりにLinkの機能を使った方がいい
    • <Link to="URL">hoge</Link>
    • URLが複雑になったときにスムーズに作れる機能を利用できる
  • Routeのパラメータ

    • Routeのpathにパラメータを埋め込むことができる
    • 例えば、blogの各記事のページをid(数字)で管理している時などに利用する。ページの数が増えて複雑になったとき、ひとつひとつ<Route>を記述するのは現実的でないから
    • path="/blog/:id" のようにパラメータ名の前に:をつける
    • パラメータは文字列として渡される
    • コンポーネント内でパラメータを利用する方法
const { id } = useParams(); //URL中にidというパラメータがあれば受け取る
return <p>{id}番目の記事</p>; //{id}の部分がパラメータの値となる

Reduxを用いたステート管理

  • ページ遷移する際に、何らか値を保持し、次のページへ渡すための処理
  • Redux がよく使われる
  • React-Reduxという版がある
  • 素のReduxではなく@reduxjs/toolkit を使うことが推奨されている

以下は素のReduxでの内容

  • Reduxで行いたい処理を関数で書く際は、状態を表すパラメータ(名例:state)とactionを引数に渡す。その関数の中でswitch文を使い、action.typeの値によってやりたい処理を分ける
  • 関数をcreateStore()の引数に渡し、返り値を変数(名前はstoreなど)に格納しておく
  • storedispatch() メソッドに、オブジェクトとして{type : type名}を渡して実行すると、上記の行いたい処理を呼び出すことができる
  • Storeという場所に値が保持されており、その値は、storegetState()メソッドで得ることができる

Reducerの処理が2回実行される

原因の調査

  • 1ずつインクリメントしたい値が2ずつインクリメントされていたため、原因を調査
  • 正しい仕様だった。Reactは、Reducerを意図的に2回実行する模様
  • バグを減らすためにReducerを純粋関数とすることが推奨されており、純粋関数でなければ、引数が同じ場合でも違う結果が返されるため、バグを早期に発見することができる
  • 本番環境では、実行は1度。2度実行されるのは開発環境のときだけ

純粋関数

  • 引数が同じ場合、常に同じ返り値となる。(参照透過性)
  • 副作用(関数の外への影響)が発生しない
  • 上記を満たす関数のこと。意図しない挙動をさせないための技術

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?