๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daily Front_Minhhk

[HTML_CSS_JS] ๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ  ๋งŒ๋“ค๊ธฐ๐Ÿ‘๐Ÿป ๋ณธ๋ฌธ

Code๊ฐœ๋ฐœ์ผ์ง€

[HTML_CSS_JS] ๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ  ๋งŒ๋“ค๊ธฐ๐Ÿ‘๐Ÿป

Minhhk 2022. 11. 15. 22:20

๐Ÿซก ๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ  ๋งŒ๋“ค๊ธฐ

  • ์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ
  • ์–ด๋ ค์› ๋˜ ๋‚ด์šฉ
  • ๊ถ๊ธˆํ•œ ๋‚ด์šฉ๊ณผ ๋ถ€์กฑํ•œ ๋‚ด์šฉ
  • ๋Š๋‚€์ 
  • ์™„์„ฑgif
  • git-hub ๋ฐฐํฌ๋งํฌ

 

โœจ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ

์ง€๊ธˆ๊นŒ์ง€ ํŽ˜์–ด์™€ ํ•จ๊ป˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ”๋‹ค๋ฉด, ์–ด์ œ์™€ ์˜ค๋Š˜! ์ดํ‹€ ๋™์•ˆ ์†”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

โœ… ํ”„๋กœ์ ํŠธ ์ œ๋ชฉ : ‘๋‚˜๋งŒ์˜ ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ  ๋งŒ๋“ค๊ธฐ’โœ…

์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ ๋ž€ ๊ธฐ์ˆ  ๊ด€๋ จ ์งˆ๋ฌธ์„ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๋ฉด ๋™๊ธฐ๋ถ„๋“ค์ด๋‚˜ ํฌ๋ฃจ๋ถ„๋“ค์ด ๋‹ต๋ณ€ํ•ด์ฃผ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์ด๋‹ค.

์ด๋Ÿฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ‹€์„ ์ฐธ๊ณ ํ•ด์„œ ๊ธฐ์ˆ  ๊ด€๋ จ ์งˆ๋ฌธ์„ ๋“ฑ๋กํ•˜๊ณ , ๋“ฑ๋ก ๋‚ ์งœ, ์ œ๋ชฉ ๋“ฑ ์ž…๋ ฅ์„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๋‹ค.

localStorage์— ์ €์žฅํ•˜๊ธฐ

localStorage.setItem('?');

localStorage์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

localStorage.getItem('?')

๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์‹œ, render() ํ•˜๊ธฐ ์ „์—!

localStorage๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค

LocalStorage์— ‘agoraData’ key๋กœ ์ €์žฅ๋œ ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด dummy data๋ฅผ ์ €์žฅํ•œ๋‹ค.

if (!localStorage.getItem('agoraData')) {
  saveDataLocalStorage(agoraStatesDiscussions)
}

localStorage์— ์ €์žฅ์‹œ JSON.stringify()

JSON ๋ฉ”์„œ๋“œ stringify๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ €์žฅํ•œ๋‹ค. (JSON์€ ๋‚˜์ค‘์— ์•Œ์•„๋ณด๊ธฐ๋กœ ::TODO::)

์ž…๋ ฅ ํผ์„ ๋ฐ›์œผ๋ฉด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด ์ฃผ์–ด์•ผ ํ•˜๊ธฐ์— ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

const saveDataLocalStorage = (obj) => {
  localStorage.setItem('agoraData', JSON.stringify(obj));
  return;
}

localStorage์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ JSON.parse()

JSON์„ ๊ฐ์ฒด๋กœ ๋‹ค์‹œ ๋ฐ”๊พธ๋ ค๋ฉด JSON.parse(localStorage.getItem(key))๋ฅผ ํ•œ๋‹ค.

const getDataLocalStorage = (name) => {
  let localData = JSON.parse(localStorage.getItem(name))
  return localData;
}

 

โœจ ์–ด๋ ค์› ๋˜ ๋‚ด์šฉ

ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์€ ์ผ๋‹จ ์ฐธ๊ณ  ์ž๋ฃŒ ์ฐธ์กฐ๋ฅผ ํ–ˆ๋‹ค,, ์ฐจํ›„ ์“ธ ๋•Œ ๊ณต๋ถ€๋ฅผ๐Ÿ˜ > ๋งจ ๋ฐ‘ ๋งํฌ ์ฐธ์กฐ

 

๋Œ€์‹  ํ™”๋ฉด์— ๋“ฑ๋ก ํ•  ul-li ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ชจ์š”์†Œ์ธ

.discussion__wrapper์—

overflow-y: scroll; ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฌดํ•œ์Šคํฌ๋กค? ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ด์–ด

scrollbar ๋ฅผ ์•ˆ๋ณด์ด๊ฒŒ ์ ์šฉ ํ•ด์ฃผ์—ˆ๋‹ค

.discussion__wrapper {
  width: 650px;
  height: 100vh;
  background: rgba(126, 169, 221, 0.5);
  overflow-y: scroll;
  border-radius: 10px;
}

/* scroll bar hide */
.discussion__wrapper::-webkit-scrollbar {
  display: none;
}

 

โœจ ๋ถ€์กฑํ•œ ๋‚ด์šฉ

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๊ธฐ๋Šฅ์„ ๋„ฃ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ธ๋‹ค.

TypeError: unshift is not a function in JavaScript ์—์„œ๋„ ์• ๋ฅผ ๋จน์—ˆ๊ณ ~

https://bobbyhadz.com/blog/javascript-typeerror-unshift-is-not-a-function

๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉด์„œ ์ฐธ๊ณ ๋„ ํ•˜๋ฉด์„œ ํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉฐ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ดค์ง€๋งŒ ์ฒ˜์Œ์—๋Š” ์ž˜ ์ž‘๋™ ํ•˜์ง€ ์•Š์•˜๋‹ค…

์ •๋ณด๊ฐ€ ์ €์žฅ๋œ data.js ์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ๋ฐฐ์—ด์˜ ์ƒํƒœ๋กœ localstorage์— ๋“ค์–ด๊ฐ€์•ผ ์ธ์‹์„ ํ–ˆ๋‹ค.

// Local Storage ์ƒ์„ฑ
if (!localStorage.getItem("dataSet")) {
  //๋งŒ์•ฝ localStorage์— agoraStatesDiscussions๊ฐ€ ์—†์œผ๋ฉด
  localStorage.setItem(
    "dataSet",
    JSON.stringify(agoraStatesDiscussions)
  ); //localStorage์— ํ‚ค๊ฐ’๊ณผ value๋ฅผ ๋„ฃ๋Š”๋‹คใ…‡ใ…‡
}
let dataSet = JSON.parse(
  localStorage.getItem("dataSet")
); //dataSet ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค„ ๋ณ€์ˆ˜ ์ €์žฅ์†Œ, dataSet agoraStatesDiscussions๊ฐ’์„ jsonํ˜•์‹์œผ๋กœ ๋ฐ›์Œ

...์ค‘๋žต
// ์ œ์ถœ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ
form.addEventListener("submit", (e) => {
	e.preventDefault(); // submit ์˜ ์ƒˆ๋กœ๊ณ ์นจ ๋ฐฉ์ง€

...์ค‘๋žต

// ๊ธฐ์กด ๋ฐฐ์—ด ๊ฐ€์žฅ ์•ž์— ์ถ”๊ฐ€
  // agoraStatesDiscussions -> Local Storage
  dataSet.unshift(obj);
  localStorage.setItem("dataSet", JSON.stringify(dataSet));
  ul.prepend(convertToDiscussion(obj));

}

๊ทธ๋ฆฌ๊ณ  ๋žœ๋”๋ง ํ•จ์ˆ˜์—์„œ๋„ ๋กœ์ง์˜ ์‹ค์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค.

 const render = (element) => {
  for (let i = 0; i < dataSet.length; i += 1) {
    element.append(convertToDiscussion(dataSet[i]));
  }
  return;
};

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ๋œ ๊ฐ์ฒด ์ •๋ณด๋“ค์˜ dataSet์˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ๋Š”๋ฐ

convertToDiscussion ํ•จ์ˆ˜๋ฅผ ์ ์šฉ์„ ํ•ด์ฃผ์ง€ ์•Š์•˜๋‹ค..

์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ๊ฐ’์„ ๋“ฑ๋ก convertToDiscussion() → render ๋ฅผ ํ•ด์ฃผ์–ด์•ผ์ง€ ํ™”๋ฉด์— ๋‚˜์˜ค๋Š”๋ฐ ๋ง์ด๋‹ค~~

 

 

๊ทธ๋ฆฌ๊ณ  ๋“ฑ๋กํ•œ ๋””์Šค์ปค์…˜ ์‚ญ์ œ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค

๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋ž‘ ์—ฐ๋™์€ ๋ชปํ–ˆ์ง€๋งŒ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋„ฃ์—ˆ๋‹ค..

x ๋ฒ„ํŠผ ์ƒ์„ฑ ํ›„ deleteDiscussion ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋ก ํ–ˆ๋‹ค.

  // ์‚ญ์ œ ํ•จ์ˆ˜
  const deleteDiscussion = (event) => {
    // console.log(event)
    // console.log(event.target.parentElement.parentElement)

    const removingOne = event.target.parentElement.parentElement;
    removingOne.remove();
  };
  
  
  
 ... ์ค‘๋žต
 
 
   // x button
  const button = document.createElement("button");
  button.textContent = "x";
  discussionAnswered.append(button);
  button.addEventListener("click", deleteDiscussion);

 

โœจ ๋Š๋‚€์ 

ํ–ˆ๋‹ค๊ณ  ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๋ถ€์กฑํ•˜๋‹ค ํ•ญ์ƒ ๋ถ€์กฑํ•˜๋‹ค~~ ์–ธ์ œ์ฏค ํƒ€๋‹ฅํƒ€๋‹ฅ ๋~~ ํ•ด๋ณผ๊นŒ^^

์žฌ๋Šฅ๋Ÿฌ๋Š” ๋ชป์žก์ง€๋งŒ ์—ด์‹ฌํžˆ ํ•ด์„œ ๋”ฐ๋ผ๊ฐ€๋ณด์ž!!

css ๋ถ€๋ถ„์€ ์ œ์ผ ์‰ฌ์šฐ๋ฉด์„œ๋„ ํ•ญ์ƒ ์–ด๋ ต๋‹ค~ ํ•˜๋‚˜ํ•˜๋‚˜ ๋…ธ๊ฐ€๋‹ค์‹์œผ๋กœ ํ•˜๋Š”๋ฐ,, ์ด๋ ‡๊ฒŒ๋ผ๋„ ํ•ด์•ผ์ง€ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜ค๋‹ˆใ… 

js๋„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ˆˆ์— ๋” ๋„๋„๋ก ๋ด์•ผ๊ฒ ๋‹ค~ ๊ตฌ๊ธ€๋ง์ด ํ•„์ˆ˜์ด๊ธด ํ•˜์ง€๋งŒ,, ๋ญ”๊ฐ€ ๋‚ด ํž˜์œผ๋กœ ์ฝ”๋“œ ์งœ๊ณ  ์‹ถ๋‹ค๐Ÿ‘๐Ÿป

๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ ์กฐ๊ธˆ ๋” ๋ฐœ์ „ํ•œ ๋ชจ์Šต์œผ๋กœ ๋Œ์•„์™€ ๋งŒ๋“ค์–ด ๋ด์•ผ๊ฒ ๋‹ค.

 

โœจ ์™„์„ฑ gif

๋””์Šค์ปค์…˜ ์ž…๋ ฅ->๋“ฑ๋ก, overflow-y: scroll, ์‚ญ์ œ๋ฒ„ํŠผ(๋””์Šค์ปค์…˜์‚ญ์ œ)

โœจ git-hub ๋ฐฐํฌ๋งํฌ

์ž์„ธํ•œ ์ฝ”๋“œ๋Š” ๋ฐฐํฌ ๋งํฌ ๋“ค์–ด๊ฐ€์„œ ์†Œ์Šค์ฐฝ์—์„œ ํ™•์ธ๐Ÿ‘๐Ÿป

https://min-hh-k.github.io/fe-sprint-my-agora-states/

 

Min_HK ์•„๊ณ ๋ผ ์Šคํ…Œ์ด์ธ 

 

min-hh-k.github.io


ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ฐธ์กฐ,,

https://min-kyung.tistory.com/30

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ฐธ์กฐ,,

https://www.daleseo.com/js-web-storage/

https://hianna.tistory.com/697

https://velog.io/@rmaomina/LocalStorage-setItem-getItem

https://yelinz515.github.io/2022-07-19/