-
์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ํ๋ก ํธ์๋ ์ฝ์ค ๊ฐ์ธ ๊ณผ์ ํ๊ณETC 2022. 2. 24. 19:15
๋ด๊ฐ ์ฐธ์ฌํ ์ํฐ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ํ๋ก ํธ์๋ ์ฝ์ค๋ 2022/01/24๋ถํฐ ์์ํด ์ค๊ฐ์ ์ค๋ ์ฐํด๊ฐ ๊ปด ์๋ค. ํด์ 1์ฃผ์ฐจ ๋ฐฐ์ฐ๊ณ ํ ์ฃผ๋ฅผ ์ด ์ ์์๋๋ฐ, ํ์๊ฐ ์๋ ๊ฐ์ธ ๊ณผ์ ๋ ํ๋ ์์๋ค. ์ฐํด์ ๋์ง ๋ง๊ณ ๊ณต๋ถ๋ ํ์ ํด์ ์๋ํ๊ฒ ๋์๋ค. ์ฌ์ค ํ์ ์คํฌ๋ฆฝํธ, ๋ฆฌ๋์ค ๋ฑ ์์ฒญ ๋ฐฐ์ธ ๊ฒ ๋ง์๋ ์ผ์ฃผ์ผ์ด์์
๊ธฐ๋ฅ์ ์ด ๋งํฌ์ ์๋ ํ๋ฉด์ ๊ตฌํํ๋ ๊ฑฐ์๊ณ , ์ฒ์ ๋ดค์ ๋ ์ข ์ด๋ ต๊ฒ ๋๋ฐ? ์ถ์์ผ๋ ์๊ทผ ๋นจ๋ฆฌ ๋๋ ๊ณผ์ ์๋ค.
1. API ์ฐ๋
์ฌ์ค API ์ฐ๋ํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค. ๋ฒจ๋กํผํธ ๋ฆฌ์กํธ๋ก ๋ฆฌ๋์ค๋ฅผ ์กฐ๊ธ ๊ณต๋ถํ๊ณ ๋์ ๊ณผ์ ์ ๋์ ํ์๋๋ฐ, ๊ฑฐ๊ธฐ์ ๋ฐฐ์ด ์ปค์คํ ํ ์ ์ฐ๋ ค๋ค ๋ญ๊ฐ ์ ์ ๋๋๋ผ....
์๋ฌดํผ API ํธ์ถ์ ์ด๋ฐ ์์ผ๋ก ์งํํ๋ค.
export async function getHome(dispatch) { dispatch({ type: "GET_HOME" }); try { const response = await axios.get( "https://cdn.ggumim.co.kr/test/image_product_link.json" ); dispatch({ type: "GET_HOME_SUCCESS", data: response.data }); } catch (e) { dispatch({ type: "GET_HOME_ERROR", error: e }); } }
function Home() { const state = useHomeState(); const dispatch = useHomeDispatch(); const { data: home, loading, error } = state.home; useEffect(() => { getHome(dispatch); }, [dispatch]); }
์๋ฒ์๋ Context API๋ก ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , state๋ dispatch ๋๋ ์ context๋ฅผ ๋ง๋ค์๋๋ฐ ์ด๊ฒ ํ์ ๋ฆฌ๋์ค ๋ฐฐ์ฐ๋ ๋ฐ ๋์์ด ๋ง์ด ๋๋ค. ๋ฆฌ๋์ค๋ฅผ ์ฒ์ ์ ํ์๋๋ฐ ์กฐ๊ธ ์ด๋ ต๋ค ์ถ์ ๋ถ๋ค์๊ฒ ์ถ์ฒํ๋ค. ์ฐธ๊ณ ํ ๋งํฌ์ด๋ค.
2. ๊ฐ๊ตฌ ์์ธ ์ ๋ณด ๋ฒํผ ๊ตฌํ
์์ธ ์ ๋ณด ๋ฒํผ์ API์ ์ด๋ฏธ์ง x, y์ถ ์ขํ ๊ฐ์ด ํจ๊ป ๋ค์ด๊ฐ ์์ด ์ขํ๋ฅผ ์ฌ์ฉํด ๋ฒํผ์ ์ฌ๋ฐ๋ฅธ ์์น์ ๋์์ผ ํ๋ค. ์ด๋ฏธ์ง ์ฌ์ด์ฆ์ ์ขํ ๊ฐ์ด ์ผ์นํ์ง ์๋ ๊ฒ ๊ฐ์์ ์ฒ์์๋ ์ด๋ฏธ์ง์ ๊ฐ๋ก ์ธ๋ก ๊ฐ์ ์ฌ์ฉํด ๋ณํ์ ํด ์ค์ผ ํ๋ ๊ฑธ๊น? ํ๋๋ฐ ์ด๊ฒ ์ฌ๊ฑธ. ๊ทธ๋ฅ position: absolute ์ค์ ํ๊ณ top, left์ ๊ฐ๊ฐ x ์ขํ, y ์ขํ ์ฐ์ด ์ฃผ๋ ์ํ๋ ๋๋ก ๋ฒํผ์ ๋์ ์ ์์๋ค.
์ง๊พธ๋ฏธ๊ธฐ ์ฌ์ดํธ์ ๊ฐ ๋ณด๋ฉด ์ด๋ฏธ์ง ์คํ์ผ์ 800px์ผ๋ก ๋ง์ถฐ์ ธ ์๋๋ฐ 800px์ผ๋ก ์ค์ ํ๋ ๋๋ ๋๋ฌด ํฌ๊ฒ ๋ณด์ด๊ธธ๋ 500px๋ก ์ค์ ํ๊ณ , ๊ทธ๋์์ธ์ง ์ ๋ง์๋จ์ด์ง ๊ฒ ๊ฐ๋ค.
๋ค๋ฅธ ๋ถ๋ค์ 1.6์ด๋ผ๋ ์ซ์๋ฅผ ๊ณฑํ์ จ๋ค๊ณ ํ๋๋ฐ ๊ทธ๋ถ๋ค์ ์ด๋ฏธ์ง๋ฅผ 800px๋ก ๋ ๋๋งํ์ ๊ฒ ๊ฐ์๋ค. ์๋ณธ ์ด๋ฏธ์ง๋ 1000px์ธ๋ฐ 800px์ ๋ง์ถ๋ ค๋ฉด 0.8์ด ์๋ 1.6์ ๊ณฑํด์ผ ๋ง์ ๋จ์ด์ง๋ค๋ ๊ฒ ์ ์ดํด๊ฐ ์ ๊ฐ๋๋ฐ, ์ง๊ธ ์๊ฐํด ๋ณด๋ 500์ ์ ๋ง์๋จ์ด์ก์ผ๋ฉด 1.6์ ๊ณฑํ๋ฉด 800์ ์ ๋ง๋ ๊ฒฐ๊ณผ์ธ ๊ฒ ๋ฉ๋์ด ๊ฐ๋ค. 500*1.6=800์ด๋๊น.... ์ ์ด์ ์ขํ๊ฐ 500์ ๋ง์ถฐ์ง ์ขํ์๋ ๋ณด๋ค.
// ๋ฒํผ ์คํ์ผ ์ฝ๋ ์ผ๋ถ const Button = styled.button` ${(props) => css` top: ${props.x}px; left: ${props.y}px; `} `;
3. ๋ฒํผ ํด๋ฆญ ์ ๊ฐ๊ตฌ ์์ธ ๋ ธ์ถ
๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ฐ๊ตฌ ์์ธ ์ ๋ณด๋ฅผ ํดํ์ผ๋ก ๋ณด์ฌ ์ค๋ค.
๋ค๋ฅธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋ก์ด ํดํ์ด ๋ณด์ด๊ณ ์ด๋ ค ์๋ ํดํ์ ๋ซ์ ์ค์ผ ํ๋ค.
๋์์ ๋ฐ์ ๋ ๋๋งํ ๊ฐ๊ตฌ ๋ชฉ๋ก์ ํ์ฌ ์ ํํ ๊ฐ๊ตฌ๋ ํ์๋ฅผ ํด์ค๋ค.๊ณผ์ ๋ฅผ ์ฒ์ ๋ดค์ ๋ ์ด๋ ต๊ฒ ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ด๋ค. ๊ทธ์น๋ง ๊ฒ์ํด์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ฉด ์ข์๊น์ ๋ํ ๊ณ ๋ฏผ์ ํ๋ฉด์ okky ์ฌ์ดํธ์์ ํํธ๋ฅผ ์ป์๋ค. ํด๋ฆญํ ๊ฐ๊ตฌ์ id๋ฅผ ์ ์ฅํด id๊ฐ ์ผ์นํ๋ฉด active ํด๋์ค๋ฅผ ๋ถ์ฌํด ํด๊ฒฐํ ์ ์์๋ค.
๋๋ณด๊ธฐ ๋ฒํผ๊ณผ ๊ฐ๊ตฌ ๋ชฉ๋ก์ ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌํด ์์ฑํ๊ธฐ ๋๋ฌธ์ ํด๋ฆญํ ๊ฐ๊ตฌ์ id๋ฅผ ์ ์ฅํ๋ FurnitureIdx๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๋ค.
const FurnitureIdxContext = createContext(null); export function FurnitureProvider({ children }) { const [clickIdx, setClickIdx] = useState("0"); return ( <FurnitureIdxContext.Provider value={{ clickIdx, setClickIdx }}> {children} </FurnitureIdxContext.Provider> ); } export function useFurnitureIdx() { const idx = useContext(FurnitureIdxContext); if (!idx) { throw new Error("Cannot find FurnitureProvider"); } return idx; }
const { clickIdx, setClickIdx } = useFurnitureIdx(); const onClick = (e) => { setClickIdx(e.target.id); if (clickIdx === id.toString()) { setClickIdx("0"); } }; // ๋ฒํผ ์ด๋ฏธ์ง ์ค์ <Button backgroundImg={clickIdx === id.toString() ? X_BUTTON : MAGNIFYING_GLASS} />
๊ทธ๋ฆฌ๊ณ ํด๋ฆญํ๋ฉด ์คํ์ผ์ด ๋ฐ๋ ์ ์๋๋ก ์ด๋ฐ ์์ผ๋ก img๋ฅผ ๋ฐ๊ฟ ์ค๋ค๋ ๊ฐ, class ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ค.
๊ทธ๋์ ์ด๋ฐ ์์ผ๋ก ์ฝ๊ฒ ํดํ๊ณผ ๊ฐ๊ตฌ ๋ชฉ๋ก ๋์์ ํจ๊ณผ๋ฅผ ์ฝ๊ฒ ๋ฃ์ ์ ์์๋ค~
ํ๊ณ ๋ฅผ ๋ง์น๋ฉฐ
์๊ฐ๋ณด๋ค ๋น ๋ฅธ ์๊ฐ ์์ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ ๊ณผ์ ๊ธฐ์ ๋ญ๋ ํ ์ ์๋ค๋ ์์ ๊ฐ์ด ๋ถ์ ๊ณ๊ธฐ๊ฐ ๋ ๊ณผ์ ์ด๊ธฐ๋ ํ๋ค. ์ด๋ ค์ ๋ณด์ด๋ ๊ณผ์ ๋๋ผ๋ ์์ ๊ฐ์ ํ ์ถฉ์ ํ ์์ธ๋ก ์ํ๋ค๋ฉด ๋๋ ์๋ฌด๋ ๋ง์ง ๋ชปํ๋ ์ฝ๋ฉ ์ ์ฌ๊ฐ ๋ ์ ์์์.......
๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ๋ฅผ ํ๋ฉด์ styled-component๋ฅผ ์ฒ์ ์จ ๋ดค๋๋ฐ ์ฐ์ JS ํ์ผ์ ํจ๊ป css ์ฝ๋๋ฅผ ์ธ ์ ์๋ค๋ ๊ฒ ๊ต์ฅํ ํธํ๊ณ ๊ทธ ์ธ์๋ css์ ๋ฌ๋ฆฌ ์ค์ฒฉ ํํ๋ก ์คํ์ผ์ ์ค ์ ์๋ค๋ ๊ฐ, ๋ณ์๋ฅผ ์ ๋ฌํด ๊ทธ์ ๋ง๋๋ก ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ๋ ์์ฃผ ์ ์ธ๊ณ์๋ค. css๋ง ์ผ๋ ๋์ ๊ณผ๊ฑฐ๋ฅผ ๋ฐ์ฑํ์. ์์ง css๋ง ์ฐ๋ ๋ถ ๊ณ์๋ฉด ์ด์ ๊ฐ์ํ์ธ์ฉ. ๊ทผ๋ฐ ๋๋ง ๊ทธ๋ฌ์ ๋ฏ.
์ ์ฒด ์ฝ๋๋ ์ฌ๊ธฐ์ ํ์ธํด ์ฃผ์ธ์. ๐ฅฐ
'ETC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ