๐Ÿ ์ปจํ…์ŠคํŠธ API

12036 ๋‹จ์–ด




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.



  • Criar um arquivo index.jsx e dentro dele importar o createContext do react.


  • import React, {createContext, useState} from 'react';
    

  • Criar e exportar o seu context (no mesmo arquivo)


  • 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์— ๋Œ€ํ•œ ๊ณต๊ธ‰์ž ์ฑ„๋„์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Criar e exporta o seu provider (no mesmo arquivo)


  • 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>
        )
    }
    


  • Importar o 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;
    


  • Agora รฉ sรณ importar o contexto criado para utilizar as informaรงรตes do seu provider.

  • 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! ๐Ÿ˜…

    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ