๐ ์ปจํ ์คํธ API
Context API รฉ uma maneira super bacana de passar estados pelos componentes sem precisar utilizar
props
, qualquer parte da sua aplicaรงรฃo์์ atualizaรงรฃo desse estado em qualquer parte da sua aplicaรงรฃo๋ฅผ ํ์ฉํฉ๋๋ค. Claro que em algumas situaรงรตes รฉ mais adequado o uso das props, mas, ร medida que vamos aumentando ร rvore de elementos, pode ficar bem chatinho transportar essas informaรงรตes sem o uso de um gerenciador de estado global. ์ด ๊ฒฝ์ฐ์๋ Context API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๐
๐พ Em resumo, รฉ sรณ imaginar que a Context API รฉ um portal entre os componentes por onde vocรช vai compartilhar as informaรงรตes, independente se sรฃo elementos que se comunicam ao nรฃo. ๋ฒจ๋ ์ง๋?
โ ์ฝ๋ชจ ํ์ฉ์
Criar um diretรณrio prรณprio para colocar o seu contexto.
index.jsx
e dentro dele importar o createContext
do react.import React, {createContext, useState} from 'react';
export const MovieContext = createContext({});
๐พ Detalhe: cada objeto Contexto (context) vem com um bicho chamado Provider e รฉ atravรฉs dele que vocรช vai conseguir aplicar mudanรงas no seu context. E isso acontece porque ele aceita uma
props
~eu nao disse que nao usarรญamos props asuhuahs~ e todos os componentes filhos terรฃo acesso a ela. MovieProvider์ ๋ํ ๊ณต๊ธ์ ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ์๋ ์ด ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.export const MovieProvider = (props) => {
const [ movies, setMovies] = useState(()=>{
api.get('http://localhost:8000/home')
.then(response => { setMovies(response.data)
.catch(err => console.log(err))
});
const [ genres, setGenres ] = useState(()=>{
api.get('http://localhost:8000/home/genres')
.then(response => setGenres(response.data))
.catch(err => console.log(err))
});
const [ selected, setSelected ] = useState();
return(
<MovieContext.Provider
value={{
movies,
genres,
selected,
setSelected,
}}
>
{props.children}
</MovieContext.Provider>
)
}
provider
no app, e utilizรก-lo bem no topo da hierarquia de componentes para criar a sua camada de estados.import React from 'react';
import { MovieProvider } from './providers/index.jsx';
import Routes from './routes/index.jsx'
function App() {
return (
<MovieProvider>
<GlobalStyle />
<Routes />
</MovieProvider>
);
}
export default App;
import React, { useContext, useState } from 'react'
import { MovieContext } from '../../providers/index.jsx';
import Header from '../../components/Header'
import MovieList from '../../components/MovieList'
const Home = () => {
const { movies, genres } = useContext(MovieContext);
return (
<>
<Header page="home" className="clicked" ></Header>
{ genres ? genres.map(genre =>
<MovieList title={genre.title} movies={movies}/>
) : null}
</>
)
}
export default Home;
Prontinho, passar perrengue com props nunca mais! ๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ์ปจํ ์คํธ API), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/luanalessa/context-api-133eํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค