18. useContext() hook
prop drilling
src/18/Component.css
.box{
border: 3px solid;
padding: 25px;
}
src/18/ComponentA.jsx
import { useState } from 'react'
import './Component.css'
import ComponentB from './ComponentB'
export default function ComponentA(){
const [user, setUser] = useState("홍길동")
return(
<div className="box">
<h1>ComponentA</h1>
<h2>{`Hello ${user}`}</h2>
<ComponentB user={user}/>
</div>
)
}
import ComponentC from './ComponentC'
export default function ComponentB(prop){
return(
<div className="box">
<h1>ComponentB</h1>
<ComponentC user={prop.user} />
</div>
)
}
import ComponentD from './ComponentD'
export default function ComponentC(prop){
return(
<div className="box">
<h1>ComponentC</h1>
<ComponentD user={prop.user} />
</div>
)
}
export default function ComponentD(prop){
return(
<div className="box">
<h1>ComponentD</h1>
<h2>{`Hello ${prop.user}`}</h2>
</div>
)
}
userContext()
import { createContext, useState } from 'react'
import './Component.css'
import ComponentB from './ComponentB'
export const UserContext = createContext()
export default function ComponentA(){
const [user, setUser] = useState("홍길동")
return(
<div className="box">
<h1>ComponentA</h1>
<h2>{`Hello ${user}`}</h2>
<UserContext.Provider value={user}>
<ComponentB user={user}/>
</UserContext.Provider>
</div>
)
}
import ComponentC from './ComponentC'
export default function ComponentB(){
return(
<div className="box">
<h1>ComponentB</h1>
<ComponentC />
</div>
)
}
import { useContext } from 'react'
import ComponentD from './ComponentD'
import { UserContext } from './ComponentA'
export default function ComponentC(){
const user = useContext(UserContext);
return(
<div className="box">
<h1>ComponentC</h1>
<h2>{`Hello again ${user}`}</h2>
<ComponentD />
</div>
)
}
import { useContext } from "react"
import { UserContext } from "./ComponentA"
export default function ComponentD(){
const user = useContext(UserContext);
return(
<div className="box">
<h1>ComponentD</h1>
<h2>{`bye ${user}`}</h2>
</div>
)
}