์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- redux์ํ์ ์ง
- dom
- https://developer-talk.tistory.com/299
- for~in/for~of
- ใทใ
- cmarket
- slice/splice/split
- children vs childrenNodes
- react
- ํท๊ฐ๋ฆฐ๋ค~
- JS#3์ผ์ฐจ๋ฌ๋ฆฌ์#์ด๋ฐ์ธ๋ฐ#์๊ฐ๊ธ๋ฐฉ~
- https://dasima.xyz/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A0%9C%EA%B3%B1-math-pow-%EA%B3%84%EC%82%B0/
- https://www.daleseo.com/js-array-slice-splice/
- removeCookie
- ๋ด์ฅ๊ณ ์ฐจํจ์
- @redux-toolkit
- variable#function
- User Flow
- ๋ ธ๋๊ต๊ณผ์
- CSS
- toString#String
- Beesbeesbees
- UI
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#var#let#const#undefined#null
- UX
- js
- ์๋ฐ์คํฌ๋ฆฝํธ#์กฐ๊ฑด๋ฌธ#๋ฌธ์์ด
- ์๋ฐ์คํฌ๋ฆฝํธ
- https://lo-victoria.com/introduction-to-redux-toolkit-for-beginners
- ์๋ฐ์คํฌ๋ฆฝํธ#JS#slice#splice
- Today
- Total
Daily Front_Minhhk
[HTML_CSS_JS] ๋๋ง์ ์๊ณ ๋ผ ์คํ ์ด์ธ ๋ง๋ค๊ธฐ๐๐ป ๋ณธ๋ฌธ
[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
โจ 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