1. Nós vamos fazer a passagem da query para a tela de search, que será através do header.

  2. Primeiro nós vamos para o nosso “routes”, para colocar a tipagem da query, já que vamos passar ela pela rota

    type PropsNavigationStack = {
      Home: undefined;
      Login: undefined;
      Register: undefined;
      Search: {
        query: string;
      };
    };
    
  3. Com isso feito, a gente consegue ir no componente do header, que está dentro da pasta common.

  4. Agora nós vamos criar um estado para pegar o valor inserido no input.

    import React, { useState } from "react";
    
    import { Container, Input, InputContainer, Logo, Search } from "./styled";
    
    const logo = require("../../../../assets/images/horizontal-logo.png");
    const search = require("../../../../assets/icons/search.png");
    
    const Header = () => {
      const [searchValue, setSearchValue] = useState("");
    
      return (
        <Container>
          <Logo source={logo} />
    
          <InputContainer>
            <Input placeholder="Pesquisa" placeholderTextColor="#C0C0C1" />
            <Search source={search} />
          </InputContainer>
        </Container>
      );
    };
    
    export default Header;
    
  5. Agora iremos usar o value e o onChangeText para poder ver a mudança do valor. E vamos ver essa mudança através do console.log

    import React, { useState } from "react";
    
    import { Container, Input, InputContainer, Logo, Search } from "./styled";
    
    const logo = require("../../../../assets/images/horizontal-logo.png");
    const search = require("../../../../assets/icons/search.png");
    
    const Header = () => {
      const [searchValue, setSearchValue] = useState("");
    
      console.log(searchValue);
    
      return (
        <Container>
          <Logo source={logo} />
    
          <InputContainer>
            <Input
              value={searchValue}
              onChangeText={setSearchValue}
              placeholder="Pesquisa"
              placeholderTextColor="#C0C0C1"
            />
            <Search source={search} />
          </InputContainer>
        </Container>
      );
    };
    
    export default Header;
    
  6. Ao digitarmos conseguimos ver que o console mostra o que digitamos. Vamos então criar uma função que vai ser chamada quando for dado o submit

    const Header = () => {
      const navigation = useNavigation<PropsStack>();
      const [searchValue, setSearchValue] = useState("");
    
      const handleSearch = () => {
        navigation.navigate("Search", {
          query: searchValue,
        });
    		setSearchValue("");
      };
    
      return (
        <Container>
          <Logo source={logo} />
    
          <InputContainer>
            <Input
              value={searchValue}
              onChangeText={setSearchValue}
              placeholder="Pesquisa"
              placeholderTextColor="#C0C0C1"
            />
            <Search source={search} />
          </InputContainer>
        </Container>
      );
    };
    
  7. Vamos chamar o “onSubmitEditing”, pois é através dele que a gente sabe quando o usuário der o “OK” no seu teclado.

    const Header = () => {
      const navigation = useNavigation<PropsStack>();
      const [searchValue, setSearchValue] = useState("");
    
      const handleSearch = () => {
        navigation.navigate("Search", {
          query: searchValue,
        });
        setSearchValue("");
      };
    
      return (
        <Container>
          <Logo source={logo} />
    
          <InputContainer>
            <Input
              value={searchValue}
              onChangeText={setSearchValue}
              placeholder="Pesquisa"
              placeholderTextColor="#C0C0C1"
              onSubmitEditing={() => {
                handleSearch();
              }}
            />
            <Search source={search} />
          </InputContainer>
        </Container>
      );
    };
    
  8. Através dessa nossa chamada de função a gente consegue utilzar o search, vamos para a página home através do nosso navbar e fazer a pesquisa, vamos ver que fomos enviados para a página de search, e agora a gente vai buscar essa query lá no search.

  9. Antes de criar a tipagem, vamos exportar o tipo das rotas que está em routes.

    import React from "react";
    import { NavigationContainer } from "@react-navigation/native";
    import { createNativeStackNavigator } from "@react-navigation/native-stack";
    import { NativeStackNavigationProp } from "@react-navigation/native-stack";
    
    import Home from "../screens/Home";
    import Login from "../screens/Login";
    import Register from "../screens/Register";
    import Search from "../screens/Search";
    
    export type PropsNavigationStack = {
      Home: undefined;
      Login: undefined;
      Register: undefined;
      Search: {
        query: string;
      };
    };
    
    const Stack = createNativeStackNavigator<PropsNavigationStack>();
    
    export type PropsStack = NativeStackNavigationProp<PropsNavigationStack>;
    
    const Routes = () => {
    
  10. Nós vamos primeiro criar a tipagem das props aqui dentro de search

    import React from "react";
    import { Container } from "./styled";
    import Header from "../../components/common/Header";
    import NavBar from "../../components/common/NavBar";
    import { NativeStackScreenProps } from "@react-navigation/native-stack";
    import { PropsNavigationStack } from "../../routes";
    
    type Props = NativeStackScreenProps<PropsNavigationStack, "Search">;
    
    const Search = () => {
      return (
        <Container>
          <Header />
          <NavBar />
        </Container>
      );
    };
    
    export default Search;
    
  11. Agora que o tipo está criado, vamos dar o console na query vindo de “route”.

    const Search = ({ route }: Props) => {
     console.log(route?.params?.query);
    
  12. Agora, se fizermos uma pesquisa darmos o enter, nós vamos ver o que foi digitado aqui lá no console. Isso funciona também caso você saia da página home para a página de search