31
8

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初心者がつまずきやすいJavaScript記法をわかりやすく整理してみた

31
Posted at

React を触っていると、JavaScript のさまざまな書き方が自然と登場します。
しかし、JavaScript の記法をしっかり理解していないと、React のコードが「なんとなく」でしか読めなくなってしまいます。

この記事では、React で頻出する JavaScript の記法を
ひとつずつ丁寧に解説していきます。


1. アロー関数(Arrow Function)

アロー関数は、関数を短く書くための構文です。
React の関数コンポーネントやイベントハンドラで頻繁に使われます。


■ 基本の書き方

const add = (a, b) => {
  return a + b;
};

処理が 1 行なら return を省略できます。

const add = (a, b) => a + b;

出力例

console.log(add(2, 3)); // 5

■ オブジェクトを返すときの注意

アロー関数でオブジェクトを返すときは、括弧で囲む必要があります。

const createUser = () => ({ name: "Taro" });

括弧がないと {} が「関数のブロック」と解釈されてしまいます。


■ React ではどう使う?

関数コンポーネント

const Hello = () => <div>Hello!</div>;

イベントハンドラ

<button onClick={() => setCount(count + 1)}>+</button>

2. 分割代入(Destructuring)

分割代入は、オブジェクトや配列から必要な値だけを取り出す書き方です。
React では props や Hooks で頻繁に使われます。


■ オブジェクトの分割代入

const user = { name: "Taro", age: 20 };
const { name, age } = user;

オブジェクトのキー名と変数名は一致する必要があります。

出力例

console.log(name); // "Taro"
console.log(age);  // 20

■ 別名をつけたいとき

const { name: userName } = user;
console.log(userName); // "Taro"

name を取り出して userName という変数にする、という意味です。


■ ネストしたオブジェクトも取り出せる

const user = {
  name: "Taro",
  address: { city: "Tokyo", zip: "123-4567" }
};

const { address: { city } } = user;
console.log(city); // "Tokyo"

■ 配列の分割代入

const arr = [10, 20, 30];
const [first, second] = arr;

出力例

console.log(first);  // 10
console.log(second); // 20

補足:スキップもできる

const [ , , third] = arr;
console.log(third); // 30

■ React ではどう使う?

props の受け取り

const User = ({ name, age }) => (
  <div>{name}{age}歳)</div>
);

Hooks

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

3. スプレッド構文(Spread Syntax)

スプレッド構文は、オブジェクトや配列を展開する書き方です。


■ オブジェクトのスプレッド

const user = { name: "Taro", age: 20 };
const copy = { ...user };

出力例

console.log(copy);
// { name: "Taro", age: 20 }

ポイント

  • ...user が user の中身を展開する
  • コピーとして使える

■ 上書きしたい場合

const newUser = { ...user, age: 21 };

出力例

console.log(newUser);
// { name: "Taro", age: 21 }

■ 浅いコピーであることに注意

const obj = { nested: { value: 1 } };
const copy = { ...obj };
copy.nested.value = 2;

console.log(obj.nested.value); // 2

ネストしたオブジェクトはコピーされず、参照が共有されます。


■ 配列のスプレッド

配列のコピー

const arr = [1, 2];
const copy = [...arr];

結合

const merged = [...arr, 3, 4];

間に挟む

const inserted = [0, ...arr, 3];

出力例

console.log(merged);   // [1, 2, 3, 4]
console.log(inserted); // [0, 1, 2, 3]

■ React ではどう使う?

props をまとめて渡す

<User {...user} />

state 更新

setUser({ ...user, age: 21 });

4. Null合体演算子(??)

Null合体演算子は、左側が null または undefined のときだけ右側を使う演算子です。


■ 基本の書き方

const name = user.name ?? "名無し";

出力例

console.log(null ?? "default");      // "default"
console.log(undefined ?? "default"); // "default"
console.log("" ?? "default");        // ""(空文字はそのまま)

■ React ではどう使う?

<div>{user.nickname ?? "ニックネーム未設定"}</div>

5. オプショナルチェーン(?.)

オプショナルチェーンは、途中のプロパティが存在しなくてもエラーにならず、undefined を返す構文です。


■ 基本の書き方

const city = user.address?.city;

出力例

const user = {};
console.log(user.address?.city); // undefined(エラーにならない)

■ React ではどう使う?

<div>{user.profile?.nickname}</div>

6. テンプレートリテラル(Template Literal)

テンプレートリテラルは、バッククォート ` を使って文字列を作る構文です。


■ 変数を埋め込む方法

const name = "Taro";
const message = `こんにちは、${name}さん`;

出力例

console.log(message); // "こんにちは、Taroさん"

■ 式も書ける

console.log(`1 + 1 = ${1 + 1}`); // "1 + 1 = 2"

■ 関数呼び出しもできる

const toUpper = (str) => str.toUpperCase();

console.log(`結果: ${toUpper("hello")}`);
// 結果: HELLO

■ 複数行の文字列もそのまま書ける

const text = `
これは
複数行の
文字列です
`;

■ React ではどう使う?

<div className={`box ${isActive ? "active" : ""}`} />

7. デフォルト引数

デフォルト引数は、関数の引数にデフォルト値を設定できる構文です。


■ 基本の書き方

const greet = (name = "ゲスト") => {
  console.log(`こんにちは、${name}さん`);
};

出力例

greet();       // "こんにちは、ゲストさん"
greet("Taro"); // "こんにちは、Taroさん"

■ 注意:null はデフォルト値にならない

greet(null); // "こんにちは、nullさん"

8. async / await(非同期処理)

async / await は、Promise を読みやすく扱うための構文です。


async の役割

  • 関数を「非同期関数」にする
  • 戻り値を Promise に変換する
async function fn() {
  return 1;
}

fn().then(console.log); // 1

await の役割

  • Promise が解決するまで「待つ」
  • 結果をそのまま変数に入れられる
const result = await somePromise();

■ まとめて使うとこうなる

const fetchUser = async () => {
  const res = await fetch("/api/user");
  const data = await res.json();
  return data;
};

■ try/catch でエラー処理が書きやすい

const load = async () => {
  try {
    const data = await fetchUser();
    console.log(data);
  } catch (e) {
    console.error("エラー:", e);
  }
};

■ React ではどう使う?

useEffect 内でのデータ取得

useEffect(() => {
  const load = async () => {
    const data = await fetchUser();
    setUser(data);
  };
  load();
}, []);

まとめ:JavaScriptの記法を理解すると、Reactが一気に読みやすくなる

React は JavaScript の記法を前提に作られています。
だからこそ、今回紹介した記法を理解しておくと、React のコードが驚くほど読みやすくなります。

  • アロー関数
  • 分割代入
  • スプレッド構文
  • Null合体演算子(??)
  • オプショナルチェーン(?.)
  • テンプレートリテラル
  • デフォルト引数
  • async / await

どれも React で毎日のように使うものです。
「JavaScript の記法 → React での使われ方」という流れで理解すると、
React の学習がぐっと楽になります。


31
8
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
31
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?