Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Integrações com React Native - #10 RN + Context API

22/10/2021

Nesse tutorial aprenderemos como propagar um estado da aplicação por todas as screens, podendo acessar determinadas informações de qualquer ponto do app.

Compartilhando estados no React Native

O compartilhamento de estados é muito comum por exemplo em ícones de notificação, nomes de usuários e outras situações em que precisamos persistir uma informações em várias partes do app.

Lembre-se que o compartilhamento de estados só dura enquanto o app estiver aberto. Se precisar persistir informações mesmo após o fechamento do app utilize AsyncStorage.

context/Provider.js

Vamos criar primeiramente um diretório context e dentro dele um arquivo chamado Provider.js

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

export const Context = createContext();

export default function Provider({children})
{
    const [pokemons, setPokemons] = useState('100 pokemons');

    return (
        <Context.Provider value={{pokemons, setPokemons}}>
            {children}
        </Context.Provider>
    )
}

Repare no código acima que o que estiver dentro da propriedade value é o que vai ser replicado para as demais screens.

App.js

No entry point App.js vamos englobar todas as screens com o Provider:

import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import {Home,Cadastro,Login,Busca,Pokedex} from './views';
import Provider from "./context/Provider";

export default function App() {
    const Stack = createStackNavigator();

    return (
        <Provider>
          <NavigationContainer>
              <Stack.Navigator>
                  {/*<Stack.Screen name="Login" component={Login} options={{headerShown:false}} />*/}
                  <Stack.Screen name="Home" component={Home} options={{headerShown:false}} />
                  <Stack.Screen name="Cadastro" component={Cadastro} options={{headerShown:false}} />
                  <Stack.Screen name="Busca" component={Busca} options={{headerShown:false}} />
                  <Stack.Screen name="Pokedex" component={Pokedex} options={{headerShown:false}} />
              </Stack.Navigator>
          </NavigationContainer>
        </Provider>
    );
}

views/Home.js

Agora na views, podemos acessar os valores dos providers:

import React, {useContext, useEffect} from 'react';
import {Image, View, TouchableOpacity,Text} from "react-native";
import {css} from "../assets/css/Css";
import {Context} from "../context/Provider";


export default function Home({navigation}) {

    const {pokemons} = useContext(Context);

    return (
        <View style={css.container}>
            <Text>{pokemons}</Text>
        </View>
    )
}

views/Cadastro.js

Podemos também mudar os estados para todas as screens da aplicação:

import React, {useState, useEffect, useContext} from 'react';
import {Context} from "../context/Provider";

export default function Cadastro({navigation}) {

    const {pokemons,setPokemons} = useContext(Context);

    useEffect(()=>{
        setPokemons('101 Pokemons');
    },[]);
}

No código acima, não esqueça de importar o useContext e o {Context}.

Sucesso nos códigos e na vida!

Precisa de aulas particulares? webdesignemfoco@gmail.com

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Integrações com React Native - #9 RN + Python + MySql
Nesse tutorial continuaremos a integração entre o React Native e o Python com Django, realizando uma listagem de dados vindos do banco de dados.
Saiba mais!
React Native - 03 Erros Comuns [Unhandled promise rejection, EOF, Unrecognized token]
Neste tutorial eu apresentarei três erros comuns no React Native: Unhandled promise rejection, Unrecognized token < e Unexpected EOF.
Saiba mais!
React JS
Nessa seção aprenderemos sobre essa importante biblioteca Javascript desenvolvida pelo Facebook para facilitar a construção backend dos nossos websites.
Saiba mais!