2019/08/25 TIL(Today I Learn)
- August 25, 2019
- 1 minute read
Twittler ๊ณผ์ ๋ฅผ ๋๋๋ค.
- ์ง๋ 22์ผ Q&A ์ธ์ ์์ class ์ ์ ๋ด์ createElement์ appendChild ๋ฑ DOM ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ด๋์ ์์ฑํด์ผ ํ๋์ง ์ง๋ฌธํ์๊ณ , ๊ทธ ๋ต๋ณ์ผ๋ก ์๋ ค์ฃผ์ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ค.
- ์ ํธ์์ด ์์ฑ๋๋ฉด ๊ฐ์ฒด ํ์ ์ผ๋ก ํธ์ ๋ฆฌ์คํธ Array์ push๋ฅผ ํด์ฃผ๊ณ array๋ฅผ ํต์งธ๋ก localStorage์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ ๊ฒํ๋ฉด ์ ์ ํํฐ๋ง์ ํ ๋ array ๋ฉ์๋์ธ filter๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ ๋์ค์ localStorage๊ฐ ์๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ ์์ ๋ ์ ์ ํ๋ค๊ณ ์๋ ค์ฃผ์ จ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฉ์์ผ๋ก ์์ ์ ํด๋ณด๋ ์๊ฐ๋ณด๋ค ๋ ์ฅ์ ์ด ์์๋ค. ์ฐ์ ์ ์ฝ๋๊ฐ ์ ์ฒด์ ์ผ๋ก ๊น๋ํด์ก๊ณ , for๋ฌธ๋ ์ฝ๊ฐ ์ค์๋ค.
- ํ ๊ฐ์ง ์์๋ก, ์๋๋ ํ์ด์ง ๋ก๋ ์ ์ด๊ธฐํ๋ฅผ ํ๋ ์ฝ๋๋ค. ์์ ์ฝ๋๋ localStorage์ 5๊ฐ์ ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด for ๋ฌธ์ ๋๋ ธ๋๋ฐ, ์์ ๋ ์ฝ๋์์๋ tweetList๊ฐ ์๋์ง๋ง ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ for ๋ฌธ์ ์์จ ์ ์์๋ค.
-
ํธ์์ ์ถ๋ ฅํ๋ render ํจ์๋ ์ค์ง์ ์ผ๋ก ๊ธฐ์กด ์ฝ๋์ ๋์ผํ ํ์๋ก for ๋ฌธ์ ์คํํ๊ธด ํ์ง๋ง, for๋ฌธ์ ํจ์ ์์ ๋ฃ์๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง์ด ํ์ํ ๋ ๊ฐ๋จํ ํจ์ ํธ์ถ๋ง ํด์ฃผ๋ฉด ๋์ด์ ์ฝ๋๊ฐ ๊น๋ํด์ก๋ค.
/* AS-IS */ window.addEventListener('DOMContentLoaded', function(){ // data.js์ ์๋ ํธ์์ด LocalStorage์ ์์ ๊ฒฝ์ฐ ์ ๋ฌ for(let i in DATA){ let value = JSON.stringify(DATA[i]); if(localStorage.getItem(i) !== value){ localStorage.setItem(i, value); } } // LocalStorage์ ์ ์ฅ๋์ด์๋ ํธ์ ์ถ๋ ฅ for(let i = 0; i < localStorage.length; i++){ let tweet = new Tweet(JSON.parse(localStorage.getItem(i))); // Object ํ์ ์ผ๋ก ๋ณํ tweet.print(); } });
/* TO-BE */ window.addEventListener('DOMContentLoaded', function(){ localStorage.getItem('tweetList') ? ( // ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์ getFromStorage() ) : ( tweetList = DATA, addToStorage(tweetList) ); // tweetList ์ถ๋ ฅ render(); });
- ๋ ์ฝ๊ฐ์ ๊ฐ์ ๋ ์ ์ผ๋ก moment ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์๊ฐ์ "00 minutes ago" ์์ผ๋ก ํ์ํ๋๋ฐ, ์ด๊ฒ ๊ทธ๋๋ง ์์ง์ด๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค๋ ๊ฒ? ๊ธฐ์กด์๋ ์๋ก ํธ์์ ํด๋ ์ด์ ์ ์์ฑ๋ ํธ์์ ๊ณ ์น์ง ์๊ธฐ ๋๋ฌธ์(์๋ก๊ณ ์นจ์ ํ์ง ์๋ ์ด์) ํญ์ "a few seconds ago"๋ผ๊ณ ํ์๋๋๋ฐ, ์ด์ ๋ ์๋ก์ด ํธ์์ ํ๊ฑฐ๋ ์ ์ ํํฐ๋ง ์์ ๋ ๋๋ง์ ์๋ก ํด๋ฒ๋ฆฌ๋๊น ์๊ฐ ํ์๊ฐ ์์ฃผ ๋ฐ๋๋ค.