Infinite Scroll ๊ธฐ๋ฅ์ ํ์์ฑ ์๋๋ ์งํํ๋ ํ๋ก์ ํธ์ ๋ฉ์ธ ํ์ด์ง ๋ด์์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ ๋๋๋งํ๋ ๋ฐฉ์์ Carousel Slide ์์ง๋ง ๊ด๋ จ ๋์์ธ ์์์ด ๋ํญ ์์ ๋์๋ค. ์ด์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด ํน์ ์ง์ ์ ๋๋ฌํ์ ๋, ์ด๋ฅผ ์ธ์ํด ์๋ฒ์์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ Infinite Scroll ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ๋ก ํ์๋ค. ์ฒ์์๋ ํน์ ์ง์ ์ ๊ณ์ฐํ๊ธฐ ์ํด ScrollingElement ๋ด์ scrollTop๊ฐ์ ์ฌ์ฉํ์์ง๋ง, ์คํฌ๋กค์ด ๋๋ ์๋์ ๋ฐ๋ผ ๊ฐ์ด ํญ์ ๋ฐ๋๋ ์ด์์ scroll event ์์ฒด์ ์ฑ๋ฅ ์ ํ ๋ฌธ์ (๋๊ธฐ์ ์ผ๋ก ์ด๋ฒคํธ ๋ฐ์ํ ๋๋ง๋ค ํธ์ถ๋๋ ์ฝ๋ฐฑ ํจ์)๋ก ์ธํด Intersection Observer API๋ฅผ ์ฌ์ฉํด ๋ณด๊ธฐ๋ก ํ๋ค. In..
๋ฌธ์ ํ์ฌ mainPage redux store์๋ ํฌ๊ฒ ์ฝํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๋ contents์ ์ฌ์ฉ์ ๋ฐฉ์ ๋ณด์ฌ์ฃผ๋ roomList๊ฐ ์ ์ฅ๋์ด ์๋ค. redux-saga๋ฅผ ํตํด ์๋ฒ์ API ํต์ ์ ํ์ฌ ๊ฐ๊ฐ์ ๋ฐฐ์ด ๋ด์ ๋ฐ์ดํฐ๋ค์ ์ ์ฌํด์ฃผ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋๋ฐ, contents์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ค์ ์๋ฒ์์ ๋ฌธ์ ์์ด ๊ฐ์ ธ์ ์ ์ฅ๋๋ ๋ฐ๋ฉด์, roomList์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฅ๋์ง ์์๋ค. ์ฒ์์๋ ์๋ฒ์ API ํต์ ํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ค ์๊ณ Promise ํ์ ๋ฉ์๋์ธ then ๋ฉ์๋ ๋ด์์ ์ฝ์์ ์ฐ์ด๋ดค๋๋ฐ, ๋ฌธ์ ์์ด roomList์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ค๋ ๊ฐ์ ธ์๋ค. ๋ฌธ์ ํด๊ฒฐ ํ์ฐธ์ ํด๋น Blocker์ ๋ํด์ ๊ณ ๋ฏผํ ๊ฒฐ๊ณผ, ๋ฆฌ์กํธ ์์์ ๋ถ๋ณ์ฑ์ ์ง์ผ์ฃผ์ง ๋ชปํด ๋ฐ์ํ ๋ฌธ์ ..
Before ์ฝ๋ ๋ค์์ ๋ก๊ทธ์ธ ์ปดํฌ๋ํธ์ JSX ์ฝ๋์ด๋ค. ๋ก๊ทธ์ธ ์๋ณ์ ์ํด id์ pwd์ value ๊ฐ์ ์๋ณํด์ฃผ๊ธฐ ์ํด state์ ๊ฐ์ ์ ์ฅํ๋ ๋ฉ์๋์ธ checkVal๋ฅผ onChange ์ด๋ฒคํธ์ ๋ฐ์ธ๋ฉํด์ฃผ์๋ค. ๋ ๊ฐ์ ๋ค๋ฅธ Input value๋ฅผ ํ๋์ ํจ์๋ก ๊ด๋ฆฌํด์ฃผ๋ค ๋ณด๋, ์๋์ ๊ฐ์ด ๋๊ฐ์ ์ฝ๋ ๋ฐ๋ณต๋๋ฉฐ ๋ถํ์ํ ์กฐ๊ฑด๋ฌธ์ด ์ฌ์ฉ๋์ด์ก๋ค. checkVal = event => { let { value } = event.target; if(event.target.className === 'login-form') { this.setState({ login : value, }); } else { this.setState({ pwd : value, }); } }; After ์ฝ๋ ์์ ๋ด์ฉ์ ์..
๊ตฌํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ด Scroll๊ฐ์ด ํ๋ฉด ์์ ๋ ์ง์ ์ ๋๋ฌํ์ ๊ฒฝ์ฐ์ ์ถ๊ฐ์ ์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ํ๋ฉด์ ๋๋๋ง๋๋๋ก ๊ธฐ๋ฅ ๊ตฌํํ์๋ค. ๋ฆฌ์กํธ ์์์ ์ ์ญ ๊ฐ์ฒด(Window)์ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ์์ ์ ์ด๋ฒ์ ์ฒ์ํ๋ ๊ฑฐ์๊ธฐ ๋๋ฌธ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํฌ์คํ ํด๋ณด๊ณ ์ ํ๋ค. ์์ค ์ฝ๋ ์ฐ์ , ์ ์ญ ๊ฐ์ฒด Window์ Scroll Event๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ์์ ์ ๋ชจ๋ ์์๊ฐ ํ๋ฉด์ ๋์ค๋ ์ฒ์๋ถํฐ ์ด๋ค. Vanilla Javascript ์์์๋ ์ด ์์ ์ DomContentLoaded ๋ load ๋ ์์ ์ ํด์ฃผ์ง๋ง ๋ฆฌ์กํธ ์์์๋ ํด๋น ์ด๋ฒคํธ ๋ฐ์ ์์ Scroll ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํด์ฃผ๋ ๊ฒ๋ณด๋ค ์ปดํฌ๋ํธ๊ฐ ์ฒ์ Mount(๋ง์ดํธ) ๋๋ ์์ ์ ํ๋ ๊ฒ์ด ๋ ๋ช ํํ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค. ์ด..
https://choi95.tistory.com/175 Carousel Slide ๊ธฐ๋ฅ Component๋ก ๋ถ๋ฆฝ Issue ์ Carousel Slide ๊ธฐ๋ฅ์ ํด๋น Main Page ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ Page ๋ด์์๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฝํ ํ์๊ฐ ์์์ ํ์ธํ์๋ค. Carousel Slide ๊ธฐ๋ฅ์ด ๋ฆฌ์คํธ ํ์์์ ์ ๋๋ก ๋์ํ๊ธฐ choi95.tistory.com ์ด์ ํฌ์คํ ์์ Carousel Slide ๊ธฐ๋ฅ ๋ด์ ์ฐ์ธ Feeds Layout์ ์ด 2๊ฐ์ด๋ค. ํด๋น Layout ํ์์ Main Page ๋ด์์ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๋ค๋ฅธ Page ๋ด์์๋ ๊ณตํต์ ์ผ๋ก ์ฐ์ธ๋ค. ์ด๋ฅผ ์ํด ์์๋ก Layout Type ๊ฐ์ props๋ก ๋๊ฒจ์ฃผ์ด Type ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์์ Feeds List๊ฐ..
Issue ์ Carousel Slide ๊ธฐ๋ฅ์ ํด๋น Main Page ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ Page ๋ด์์๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฝํ ํ์๊ฐ ์์์ ํ์ธํ์๋ค. Carousel Slide ๊ธฐ๋ฅ์ด ๋ฆฌ์คํธ ํ์์์ ์ ๋๋ก ๋์ํ๊ธฐ ์ํด์๋, ํด๋น ๋ฆฌ์คํธ ์์๋ค์ด Wrapper์ธ Carousel Slide ํ๊ทธ ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ผ ํ๋ค. Solution ์ฐ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ์คํธ ์์๋ฅผ ๋์ ์ผ๋ก ์์ฑํด ์ฃผ๋ MovieList ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ์ฃผ์๋ค. (Feed Layout ๋ํ ๋์ค์ ์ฌํ์ฉํ๊ธฐ ์ํด Presentation Component๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ์ฃผ์๋ค) render() { let { curFeedsType, curMovieListData } = this.state; if (this..
Issue ์ ์ธํ React๋ ์ํธ์์ฉ์ด ๋ง์ UI๋ฅผ ๋ง๋ค ๋ ์๊ธฐ๋ ์ด๋ ค์์ ์ค์ฌ์ค๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ์ํ์ ๋ํ ๊ฐ๋จํ ๋ทฐ๋ง ์ค๊ณํ์ธ์. ๊ทธ๋ผ React๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์ ์ ํ ์ปดํฌ๋ํธ๋ง ํจ์จ์ ์ผ๋ก ๊ฐฑ์ ํ๊ณ ๋ ๋๋งํฉ๋๋ค. ์ ์ธํ ๋ทฐ๋ ์ฝ๋๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ณ ๋๋ฒ๊ทธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๋๋ค. ๋ค์ ์ค๋ช ์ ๋ฆฌ์กํธ ๊ณต์ ์ฌ์ดํธ์ ์ฒ์ ๋ค์ด๊ฐ๋ฉด ๋ฉ์ธ ํ์ด์ง์์ ๋ฐ๋ก ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์ ์ธํ์ด ์ ํํ ์ด๋ค ์๋ฏธ๋ฅผ ์ง๋๊ณ ์๋์ง, ์ค์ ์ฝ๋ ํ์์ ์ฝ๋์ ํจ๊ป ์ดํด๋ณด๊ณ ์ ํ๋ค. ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ, ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌด์์ ํ ๊ฒ์ธ๊ฐ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ(Imperative Programming)์ ์ด๋ค ๋ฐฉ๋ฒ(How)์ผ๋ก ํ ๊ฒ์ธ์ง์..
Issue import React, { Component } from 'react'; import { Link } from 'react-router-dom'; class Comments extends Component { render() { let { name, comment } = this.props; let isSkip = false; let addVal; if (comment.length > 20) { comment = comment.slice(0, comment.length - 6); isSkip = true; addVal = ( ๋๋ณด๊ธฐ... ); } return ( {name} {comment} {isSkip && addVal} ); } } export default Comments; ๋ค์ ์ฝ๋..