useContext() là cách để không phải dùng Consumer
Bình thường, hàm createContext()
sẽ cho ta dùng 2 JSX: Provider
cho đầu vào, và Consumer
cho đầu ra.
Đầu vào¶
import { createContext } from 'preact'
const TênContext = createContext('Alice')
export default function App() {
return (
// provide the username value to our subtree:
<TênContext.Provider value="Bob">
<ComponentCon>
...
<ComponentConCháuChắtChútChít />
...
<ComponentCon />
</TênContext.Provider>
)
}
Đầu ra¶
import { TênContext } from "../routes/index.tsx";
export default function ComponentConCháuChắtChútChít(){
return (
<TênContext.Consumer>
{username => (
// access the current username from context:
<span>{username}</span>
)}
</TênContext.Consumer>
)
}
Khi dùng useContext()
, đầu ra bây giờ trông như sau:
import { TênContext } from "../routes/index.tsx";
import { useContext } from "preact/hooks";
export default function ComponentConCháuChắtChútChít(){
const username = useContext(TênContext)
return <span>{username}</span>
}
Việc dùng hook này không chỉ làm code ngắn hơn mà nó còn cho ta được lấy giá trị như một biến bình thường mà không phải ở trong JSX
Nó giống như việc await với async là cách để viết hàm bất đồng bộ với tư duy khi viết hàm tuần tự
Nguồn:: Context | Preact: Fast 3kb React alternative with the same ES6 API. Components & Virtual DOM.
createContext() nằm ngoài global, useContext() nằm trong component