LoginSignup
2
2

ReactとかNextを使うことになったから頑張る①

Last updated at Posted at 2023-05-23

はじめに

本記事は最終的にNext.jsがなんとなくわかるようになるまでを目標に書いています。ほぼ備忘録的な使い方をしているので、同じような考えの方いたら是非ストックを!

本記事は参考文献にあります
https://www.udemy.com/course/react-complete-guide/
の講義の内容を基に作成しています。興味ある方はこちらも是非

ほんとは上の講義の内容を一つの記事にまとめたかったけど、めちゃ長くなりそうだから分割していく。(全部で何編になるだろうか。。。)

とりあえず①はほぼjavascriptの基本的なところになってしまったので、Reactから見てみたい方がいれば②の記事から

②:https://qiita.com/atsu123456789/items/9fc5b6bf02dafd9e0212

対象者

HTMLについてわかってる(なんとなくでおk)
最低限のjavascriptを知っている
ReactやNext.jsの勉強をしたい

アロー関数

main.js
// 一般的な関数の定義
function fn(number) {
    return number * 2;
}

// アロー関数
const fn = (number) => {
    return number * 2;
}

// 引数が一つの時、()を省略できる
const fn = number => {
    return number * 2;
}

// 処理が一行の時、{}を省略できる
const fn = number => number * 2;

// オブジェクトを返り値として返したいときは()で括る
const fnArrowObj = number => ({ result: number*2});

ESModuleのExport/Importについて

module.js
// exportをつけることで外部ファイルから関数の呼び出しが可能に
export const hello = () => {
     console.log("hello!");
};
main.js
// 外部ファイルからの呼び出し
import {hello} from "./module.js"
hello();

classの呼び出し

module.js
class User {
  constructor(name) {
    this.name = name;
  }
  hello() {
    console.log(this.name);
  }
}

export { User }
main.js
import {User} from "./module.js";

const user = new User("Tom");
user.hello();

コールバック関数

main.js
// 引数callbackには関数名を入れることが出来る
function print(callback) {
    const result = callback(2);
    console.log(result);
}

function fn(number) {
    return number * 2;
}

print(fn)

DOMとイベントリスナについて

DOMとは ・・・JavascriptでHTMLを操作するためのオブジェクト(タグ)

main.js
// htmlのh1タグを指定
const h1element = document.querySelector('h1');
console.dir(h1element);

h1element.textContent = "変更後のタイトル";

// buttonをクリック時に起こす処理方法を記載
const btnEl = document.querySelector('button');
btnEl.addEventListener('click', (e) => {
	console.log(e.target);
	console.log('hello');
})

// イベントハンドラは関数名で渡すことも可能
const helloEb = (e) => {
	console.log('hello');
}

const btnEl = document.querySelector('button');
btnEl.addEventListener('click', helloFn);

map関数とfilter関数

main.js
const arry = [10, 20, 30, 40];
const newArry = [];

const newArry2 = arry.map(val => val*2);

// 上のmap関数の処理は以下の処理と同じことをしている
for(let i = 0; i < arry.length; i++){
	newArry.push(arry[i] * 2);
}

// 第二引数を持たせると、index番号が入る
const newArry3 = arry.map((val, i, arry) => {
	console.log(i);
	console.log(arry);
	return val * 2;
});

// filter関数
const newArry4 = newArry2.filter(val => val > 50);

// 上のfilter関数の処理は以下と同じことをしている
for(let i = 0; i < arry.length; i++){
	const val = arry[i] * 2;
	if(val > 50){
		newArry.push(arry[i] * 2);
	}
}

スプレット演算子と余残引数について

main.js
// 関数の引数に配列を展開して渡すとき
const nums = [3,1,4,1,5,10,2,6];
const result = Math.max(...nums);

let arr1 = [1,2,3];
let arr2 = [4,5,6];
let newArr = [...arr];
let newArr1 = arr;
if(newArr1 == arr1) // True
if(newArr == arr1) // False
newArr1.push(4) // 参照元であるarr1にも4がpushされる
newArr.push(4) ///arr1は別々の配列であるため、arr1には影響がない
let newArr2 = [...arr1, ...arr2]; // 2つのスプレット演算子を使うことも可能

// 関数の引数でも使うことが出来る
const restA = (...argA) => {
    console.log(argA);
}
restA(1,3,4,5)

// 特定の引数のみをスプレット演算子以外で渡すことも可能
const restB = (n, ...argB) => {
    console.log(argB);
}
restB(1,3,4);

三項演算子

main.js
// ?の直後のものがaがtrueであった時の処理、:の後ろがfalseであった時の処理を記述している
const a = true;
let resultA = a ? "true" : "false";

// 上の三項演算子を使った処理は以下の処理と同じである
if(a) {
  resultA = "true";
} else {
  resultA = "false";
}

Promiseを使った非同期処理

main.js
let a = 0;

// 引数resolveはthen以下での引数とでき、rejectはcatchの処理で使われる
new Promise((resolve, reject) => {
	setTimeout(() => {
		a = 1;
		resolve(a);
	}, 2000);
}).then(() => {
	console.log(a);
}).catch(() => {
	console.log('catchが実行');
})

awaitとasysnc

main.js
let a = 0;

// awaitを用いることで、resolve()の処理を待ってから次の処理を行う。
// その際に関数名の前にasyncをつける必要がある
async function init() {
    await new Promise((resolve, reject) => {
        setTimeout(() => {
            a = 1;
            resolve(a)
        }, 2000);
    })
    console.log(a);
}

// 下記のようにすると、resolve(a)がresultという変数に格納される
async function init() {
    const result = await new Promise((resolve, reject) => {
        setTimeout(() => {
            a = 1;
            resolve(a)
        }, 2000);
    })
    console.log(result);
}

// try, catchを用いることで先ほどのようにthenなどを使わないで書ける
async function init() {
    try {
        const result = await new Promise((resolve, reject) => {
            setTimeout(() => {
                a = 1;
                resolve(a)
            }, 2000);
        })
            console.log(result);
    } catch(e) {
        console.log('catchが実行', e)
    }
}

参考文献

2
2
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
2
2