0
0

Reactの基本

Posted at

Reactの基本

jsxの記法

jsxとは

  • JavaScriptの構文拡張
  • 基本的には、JavaScriptの中にHTMLタグを直接書くことができるようになるもの。
  • HTMLに似た見た目をしているが、背後ではJavaScriptが動作している。

実際の使われ方

  • アロー関数によるReactコンポーネントの定義
const App = () => {
  return (
    <div>
      <h1>Hello, world!</h1>
    </div>
  );
}
  • 上記コンポーネントの使い方
    App コンポーネントを ReactDOM.render() の中でレンダリングする
ReactDOM.render(<App />, document.getElementById('root'));

exportについて

名前付きエクスポート

  • エクスポート元
// 名前付きエクスポート
export const name = 'John';
export function sayHello() {
   return `Hello, ${name}`;
}
  • 使用先
import myFunction, { name, sayHello } from './module.js';

デフォルトエクスポート

  • エクスポート元
// デフォルトエクスポート
export default function sayHello() {
   return 'Hello, World';
}
  • 使用先
import myFunction, { name, sayHello } from './module.js';

イベントについて

onClickの指定について

  • onClick={}の{}の中には実行される関数を指定する。
  • 使い方の例
const handleClick = (message) => {
  alert(message);
};

<Button onClick={() => handleClick('Button was clicked!')}>Click me</Button>
  • ※下記のように指定しないこと
<Button onClick={handleClick('Button was clicked!')}>Click me</Button>

React Hooksについて

React Hooksとは

  • stateなどのReactの機能をクラスを使わずに使えるようになる機能

useState

  • stateを管理するためのHooks
  • 使い方は下記
// const [状態変数, 状態を変更するための関数] = useState(状態の初期値)

const [count, setCount] = useState(0);

- 再レンダリング後もstateは保持し続ける

  • reactは一度に複数のstate更新リクエストを受け取った際、一括でバッチ処理をして1度のレンダリングにまとめてしまう
    • そのため関数内で複数回同様のsetStateを行うと、最後に記述したsetStateのみ実行される
    • 上記を防ぐためには、setStateに状態更新用の関数を渡せば良い
      setCount((prevCount)=> prevCount+1)

useEffect

  • 関数をレンダリング後に実行させることができるHooks
  • 第二引数に指定した変数に変化があった際のみ、第一引数の関数を実行させることができる
  • 第二引数が空[]の場合、初回レンダリング時のみ関数が実行される
useEffect(() => {
  /* 第1引数には実行させたい副作用関数を記述*/
  console.log('副作用関数が実行されました!')
},[依存する変数の配列]) // 第2引数には副作用関数の実行タイミングを制御する依存データを記述

useContext

  • コンポーネント間で共通のデータを使用したい時に使うHooks
  • propsのバケツリレーを防ぐことができる
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