-
Notifications
You must be signed in to change notification settings - Fork 7
ContextApi
context๋ฅผ ์ด์ฉํ๋ฉด ๋จ๊ณ๋ง๋ค ์ผ์ผ์ด props๋ฅผ ๋๊ฒจ์ฃผ์ง ์๊ณ ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ ์ ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์์.
์ผ๋ฐ์ ์ธ React ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ ์์์ ์๋๋ก (์ฆ, ๋ถ๋ชจ๋ก๋ถํฐ ์์์๊ฒ) props๋ฅผ ํตํด ์ ๋ฌ๋์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ ์ ํด์ค์ผ ํ๋ props์ ๊ฒฝ์ฐ ์ด ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋ก์ธ ์ ์์.
context๋ฅผ ์ด์ฉํ๋ฉด, ํธ๋ฆฌ ๋จ๊ณ๋ง๋ค ๋ช ์์ ์ผ๋ก props๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๋ ๋ง์ ์ปดํฌ๋ํธ๊ฐ ์ด๋ฌํ ๊ฐ์ ๊ณต์ ํ ์ ์์
context๋ฅผ ์ฌ์ฉํ๋ฉด redux,mobx ์์์ ์ฒ๋ผ ์ํ๊ด๋ฆฌ๋ฅผ ํ ๊ณณ์์ ํ ์ ์์.
context์ ์ฃผ๋ ์ฉ๋๋ ๋ค์ํ ๋ ๋ฒจ์ ๋ค์คํ ๋ ๋ง์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ.
context๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ฏ๋ก ๊ผญ ํ์ํ ๋๋ง ์จ์ผํจ.
- ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ค์๋ฉด host-page์์ host์ ์ ๋ณด ์ฆ hostID, profile image, email, name ๋ฑ๋ฑ์ ์ ๋ณด๋ host page ๋ด์ ์ ์ฒด์ ์ธ ์ปดํฌ๋ํธ ์์์ ์ฌ์ฉ๋ ์ฌ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ์ผ๋ก context ์ค์ ํด์ ์ฌ์ฉํ๋๊ฒ ํธํด์ ์ฌ์ฉ.
//src/libs/hostContext.js
import React from "react";
const HostContext = React.createContext({});
const HostProvider = HostContext.Provider;
export { HostContext, HostProvider };-
๋ฆฌ์ํธ hook์์๋ Consumer๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ํ์ง ์์.
-
Context ์ค๋ธ์ ํธ์ ํฌํจ๋ React ์ปดํฌ๋ํธ์ธ Provider๋ context๋ฅผ ๊ตฌ๋ ํ๋ ์ปดํฌ๋ํธ๋ค์๊ฒ context์ ๋ณํ๋ฅผ ์๋ฆฌ๋ ์ญํ
Provider๋ฅผ Context๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ก ๊ฐ์ผ๋ค. host app ์ ์ฒด์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌํ๋ก์ ํธ์์ app.js๋ฅผ ๊ฐ์์
//src/App/App.js
return (
<HostProvider value={hostInfo}>
<div className="App">
<Header />
<Nav />
{modal && <NewPollModal />}
<Content event={event} />
</div>
</HostProvider>
);- Provider์ value๋ฅผ ํตํด ํ์ ์ปดํฌ๋ํธ๋ค์๊ฒ context๋ฅผ ์ ๊ณต ํ ์์์
Provider๋ก ๊ฐ์ผ ์ปดํฌ๋ํธ์ ํ์ ์ปดํฌ๋ํธ์์ context๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ ์ ์์ react hook์์๋ ๊ฐ๋จํ๊ฒ consumer๋ก ๊ฐ์ธ์ง ์๊ณ useContext๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ฐธ์กฐ ๊ฐ๋ฅ useContext๋ฅผ ์ฌ์ฉํ๋ฉด ์์์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ ์ด๋ฃจ๋ provider๋ฅผ ์ฐพ์ ๊ทธ์ ํด๋นํ๋ context๋ฅผ ์ฐธ์กฐ.
//src/component/HeaderAccountAvata.j
import { makeStyles } from "@material-ui/core";
import Avatar from "@material-ui/core/Avatar";
import React, { useContext } from "react";
import { HostContext } from "../libs/hostContext";
function HeaderAccountAvata({ userName }) {
const host = useContext(HostContext);
console.log(host);
const useStyles = makeStyles({
headerAvatar: {
backgroundColor: "#FFF",
color: "#212529",
margin: "0.5rem",
"&:hover": {
color: "#FFF",
backgroundColor: "#69747f",
},
},
avatarImage: {
width: "2.5rem",
height: "2.5rem",
borderRadius: "15px",
},
});
const classes = useStyles();
const inner = userName.slice(0, 1);
return (
<Avatar className={classes.headerAvatar}>
<img className={classes.avatarImage} src={host.image}></img>
</Avatar>
);
}
export default HeaderAccountAvata;- ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ํค๋๋ถ๋ถ์ host profile image๋ฅผ ๋จ์๊ธฐ ์ํด ์ฌ์ฉ host์ ๋ํ ์ ๋ณด๋ app์ด ์์๋ ๋ ์๋ฒ๋ก ๋ถํฐ ๋ฐ๊ณ ์ด๋ createModal,hostModal ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ context๋ก ์ฌ์ฉ.
๊ธฐํ
์ค๊ณ
๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ ์ค์
๋ฐํ ์๋ฃ
๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- 2019.11.05
- 2019.11.06
- 2019.11.07
- 2019.11.08
- 2019.11.11
- 2019.11.12
- 2019.11.13
- 2019.11.14
- 2019.11.15
- 2019.11.18
- 2019.11.19
- 2019.11.20
- 2019.11.21
- 2019.11.22
- 2019.11.25
- 2019.11.26
- 2019.11.27
- 2019.11.28
- 2019.12.03
- 2019.12.04
- 2019.12.09
- 2019.12.10
- 2019.12.11
- 2019.12.12
- 2019.12.13
- 2019.12.16
- 2019.12.18
- 2019.12.19
- 2019.12.20