🎃

【初心者向け/ITスクール 80日】JS練習

2023/11/13に公開

はじめに

今日は、ITスクールに通った80日目の日です。
Reactの前にJSをしっかり勉強した方が良いというアドバイスを受け、JSでアプリケーションを作成する練習をしました。

JavaScript

計算機(Objectの関数を活用)

今まで、JSONのようにデータをマッピングすることはありましたが、関数を直接使ったことがなかったので、いい勉強でした。
関数名をKeyに設定し、Valueのロジックを実行する方法でした。

const calculator = {
  plus: function (a, b) {
    return a + b;
  },
  minus: function (a, b) {
    console.log(a - b);
  },
  times: function (a, b) {
    return a * b;
  },
  divide: function (a, b) {
    return a / b;
  },
  power: function (a, b) {
    return a ** b;
  },
};

console.log(calculator.power(10, 3));
1000

Event(CSS)

JSから直接CSSを操作する方法は洗練されている方法ではない。
なるべく分離することが良い。
ex) h1.style.color = 'blue' -> BAD

const h1 = document.querySelector('div.hello:first-child h1');


function handleTitleClick() {
  
  //before
  const clickedClass = 'clicked'
  if(h1.classList.contains(clickedClass)){
     h1.classList.remove(clickedClass);
  }else{
     h1.classList.add(clickedClass);
  }  

  //after( toggle = add + remove)
  h1.classList.toggle('clicked');
}

h1.addEventListener('click', handleTitleClick);
.clicked {
  color: tomato;
}

★fetch★

fetch()を通して、AJAXをやってみる練習を行いました。
以下が一番基本的なfetch()の方法です。

<script>
fetch('address')
  .then(res => res.json())
  .then(json => { json.arrays or object
    // dataの通信を成功した際に、呼び出すロジック。
  });
  </script>

jsonファイルをhtmlからロードしてみます。

まず、jsonを作成する必要があります。

その後、jsからfetchメソッドを利用してみます。

/*
data.jsonをfetch()で取得する

1. fetch(url)を使用してデータを取得します。
2. 返されたresponseをjson()関数を使用してJavaScriptのObjectに変換します。
3. JavaScriptのObjectからitems配列を返します。
*/

function loadItems() {
  return fetch('data/data.json')
    .then((response) => response.json())
    .then((json) => json.items);
}

/*
items配列をHTMLに挿入する

1. ulクラス内のliを子要素として追加するために、クエリセレクタを使用して要素を取得します。
2. itemsは配列なので、mapを使用して繰り返し処理を作成します。
3. HTMLにはitemsの各要素の属性にアクセスして値を挿入します。
4. 必ずjoin('')を使用します。これを使用しないと、各要素が配列になり、HTML文書にカンマが表示されます。
   これを1つの文字列に結合する必要があります。
*/
function displayItems(items) {
  const container = document.querySelector('.items');
  container.insertAdjacentHTML(
    'afterbegin',
    items.map((item) => createHTMLString(item)).join('')
  );
}

function createHTMLString(item) {
  return `
  <li class="item">
        <img src=${item.image} alt="${item.type}" class="item__thumbnail" />
        <span class="item__description">${item.gender},${item.size}</span>
  </li>
  `;
}

//main
loadItems()
  .then((items) => {
    displayItems(items);
    // setEventListeners(items);
  })
  .catch(console.log);

Discussion