You should consider using React Context API https://uk.reactjs.org/docs/context.html. Its dedicated to sharing the common state (items in your case). Here is an example: You should create a common context for items: ItemsState.js

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

const ItemsContext = React.createContext([]);

export const ItemsProvider = ({ children }) => {
  return (
    <ItemsContext.Provider value={useState([])}>
      {children}
    </ItemsContext.Provider>
  );
}

export const useItems = () => useContext(ItemsContext);

Then share the context between screens with provider in App.js like this

import {ItemsProvider} from 'ItemsState';

function App() {
  return (
   <ItemsProvider> // share the items between both screens
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Add" component={AddScreen} />
      </Stack.Navigator>
    </NavigationContainer>
   </ItemsProvider>
  );
}

Then use items context in each screen like this AddScreen.js

import {useItems} from './ItemsState';

function AddScreen({ route, navigation }) {
  const [items, setItems] = useItems(); // <- using items context as global useState
  const [itemName, setItemName] = React.useState('');
  const [itemPrice, setItemPrice] = React.useState('0');

  const addItem = () => {
    setItems([...items, { itemName, itemPrice }]);
    setItemName('');
    setItemPrice('0');
  };

  return (
    <View>
      <TextInput
        multiline
        placeholder="What's on your mind?"
        value={itemName}
        onChangeText={setItemName}
      />
      <TextInput
        multiline
        placeholder="What's on your mind?"
        value={itemPrice}
        onChangeText={setItemPrice}
      />
      <Button
        title="Done"
        onPress={() => {
          addItem();
          // Pass params back to home screen
          navigation.navigate('Home', items);
        }}
      />
    </View>
  );
}

You can also use useReducer hook and make more Redux-like. Check out this article https://medium.com/simply/state-management-with-react-hooks-and-context-api-at-10-lines-of-code-baf6be8302c

Answer from Rostyslav on Stack Overflow
🌐
npm
npmjs.com › package › react-native-navigation-hooks
react-native-navigation-hooks - npm
A set of React hooks for React Native Navigation docs.
      » npm install react-native-navigation-hooks
    
Published   Feb 04, 2021
Version   6.3.0
Author   Juan Pablo Garcia Dalolla
🌐
React Navigation
reactnavigation.org › docs › use-navigation
useNavigation | React Navigation
The useNavigation hook returns the navigation object of the screen where it's used: ... import { useNavigation } from '@react-navigation/native'; function MyBackButton() { const navigation = useNavigation(); return ( <Button onPress={() => { ...
Discussions

How to use react hooks on react-native with react-navigation
This is App.js using react-navigation. There are two screens on it called HomeScreen and AddScreen. import * as React from 'react'; import { NavigationContainer } from '@react-navigation/native'; More on stackoverflow.com
🌐 stackoverflow.com
reactjs - React Native: Why not just use Navigation hooks all the time? - Stack Overflow
I've built one or two RN apps for work and whenever I struggle with passing a navigation component for one reason or another useNavigation always saves my bacon. So if you can use this to access the More on stackoverflow.com
🌐 stackoverflow.com
useNavigation hook from react navigation
Yes, it's best to use this hook. it has a couple of advantages: It's typesafe compared to navigation prop which needs custom annotation for TypeScript and it's possible to make a mistake there Makes your components portable, you can easily move around components without breaking things Make sure to specify the proper types https://reactnavigation.org/docs/typescript#specifying-default-types-for-usenavigation-link-ref-etc In the upcoming version React Navigation 7, useNavigation will be the only way to handle navigation when using the static config API. More on reddit.com
🌐 r/reactnative
5
0
May 29, 2024
how to create a hook with navigation properties for useContext react-native - Stack Overflow
Thank you very much in advance I have a native reagent application that is in the following order of components: ... import React from 'react'; import { Routes } from './src/routes'; import { AppProvider } from './src/hooks'; export default function App() { return ( ); } I just needed to use the navigation ... More on stackoverflow.com
🌐 stackoverflow.com
🌐
GitHub
github.com › Nubescope › react-native-navigation-hooks
GitHub - Nubescope/react-native-navigation-hooks: A set of React hooks for React Native Navigation.
A set of React hooks for React Native Navigation docs.
Starred by 253 users
Forked by 19 users
Languages   TypeScript 66.5% | MDX 20.1% | JavaScript 4.7% | Java 3.1% | Ruby 2.7% | Objective-C 1.9% | TypeScript 66.5% | MDX 20.1% | JavaScript 4.7% | Java 3.1% | Ruby 2.7% | Objective-C 1.9%
🌐
Detox
wix.github.io › react-native-navigation › docs › functionalComponents
Using functional components as screens | React Native Navigation
underscopeio/react-native-navigation-hooks is a wonderful library which greatly simplifies usage with hooks by introducing dedicated hooks for each event.
🌐
GitHub
github.com › react-navigation › hooks
GitHub - react-navigation/hooks: React hooks for convenient react-navigation use
December 3, 2022 - 🏄‍♀️ Surfing the wave of React Hook hype with a few convenience hooks for @react-navigation/core v3/v4. Destined to work on web, server, and React Native.
Starred by 576 users
Forked by 34 users
Languages   TypeScript 93.8% | JavaScript 6.2% | TypeScript 93.8% | JavaScript 6.2%
Top answer
1 of 2
6

You should consider using React Context API https://uk.reactjs.org/docs/context.html. Its dedicated to sharing the common state (items in your case). Here is an example: You should create a common context for items: ItemsState.js

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

const ItemsContext = React.createContext([]);

export const ItemsProvider = ({ children }) => {
  return (
    <ItemsContext.Provider value={useState([])}>
      {children}
    </ItemsContext.Provider>
  );
}

export const useItems = () => useContext(ItemsContext);

Then share the context between screens with provider in App.js like this

import {ItemsProvider} from 'ItemsState';

function App() {
  return (
   <ItemsProvider> // share the items between both screens
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Add" component={AddScreen} />
      </Stack.Navigator>
    </NavigationContainer>
   </ItemsProvider>
  );
}

Then use items context in each screen like this AddScreen.js

import {useItems} from './ItemsState';

function AddScreen({ route, navigation }) {
  const [items, setItems] = useItems(); // <- using items context as global useState
  const [itemName, setItemName] = React.useState('');
  const [itemPrice, setItemPrice] = React.useState('0');

  const addItem = () => {
    setItems([...items, { itemName, itemPrice }]);
    setItemName('');
    setItemPrice('0');
  };

  return (
    <View>
      <TextInput
        multiline
        placeholder="What's on your mind?"
        value={itemName}
        onChangeText={setItemName}
      />
      <TextInput
        multiline
        placeholder="What's on your mind?"
        value={itemPrice}
        onChangeText={setItemPrice}
      />
      <Button
        title="Done"
        onPress={() => {
          addItem();
          // Pass params back to home screen
          navigation.navigate('Home', items);
        }}
      />
    </View>
  );
}

You can also use useReducer hook and make more Redux-like. Check out this article https://medium.com/simply/state-management-with-react-hooks-and-context-api-at-10-lines-of-code-baf6be8302c

2 of 2
0

in order to share data between components you can use Context API or Redux, passing full objects through navigation routes is an anti-pattern, you can find more information in the docs

https://reactnavigation.org/docs/params/#what-should-be-in-params

🌐
npm
npmjs.com › package › react-navigation-hooks
react-navigation-hooks - npm
Call hooks directly from the render function! ... Access the navigation state of the current route, or if you're in a navigator view, access the navigation state of your sub-tree.
      » npm install react-navigation-hooks
    
Find elsewhere
🌐
React Native
reactnative.dev › docs › navigation
Navigating Between Screens · React Native
1 week ago - Each screen definition also needs a screen property that is a React component or another navigator. Inside each screen component, you can use the useNavigation hook to get the navigation object, which has various methods to link to other screens.
🌐
Medium
medium.com › @engi.bolat › type-safe-and-reusable-navigation-hooks-in-react-native-b7cf827cfdd5
Type-Safe and Reusable Navigation Hooks in React Native | by Engin Bolat | Medium
November 19, 2024 - One of the hooks will allow us to navigate the stack we want to navigate in a way that only covers the pages and parameters in that stack, and the other hook will allow us to access the parameters of a page we want in a certain stack by calling ...
🌐
CodeSandbox
codesandbox.io › examples › package › react-native-navigation-hooks
react-native-navigation-hooks examples - CodeSandbox
Use this online react-native-navigation-hooks playground to view and fork react-native-navigation-hooks example apps and templates on CodeSandbox.
🌐
Cursa
cursa.app › all courses › technology and programming › app development › building cross-platform apps with react native
Managing Navigation with React Navigation Library: Using Navigation Hooks for Functional Components : Course Building Cross-Platform Apps with React Native | Cursa
This hook is particularly useful when you need to perform navigation actions in response to user interactions or other events within a component. Continue in our app. Listen to the audio with the screen off. Earn a certificate upon completion. Over 5000 courses for you to explore! Or continue reading below... ... import React from 'react'; import { Button } from 'react-native'; import { useNavigation } from '@react-navigation/native'; const MyComponent = () => { const navigation = useNavigation(); return ( <Button title="Go to Details" onPress={() => navigation.navigate('Details')} /> ); };
Author   Cursa: Free Online Courses + Free Certificate
Pages   104
🌐
Stack Overflow
stackoverflow.com › questions › 71386946 › react-native-why-not-just-use-navigation-hooks-all-the-time
reactjs - React Native: Why not just use Navigation hooks all the time? - Stack Overflow
There is no reason to dont use useNavigation hook, is a hooks adventages, you can reused a function wherever you want (and when the scope allows you) ... The navigation prop is passed to all components that are defined as screens in a react-native navigator, e.g.
🌐
Lö Victoria
lo-victoria.com › a-look-at-react-hooks-usenavigation
A Look at React Hooks: useNavigation | Victoria Lo
December 9, 2022 - As stated in their official documentation, this Hook returns any information you need about a page navigation, such as: * Global loading indicators * Disabling forms while a mutation is happening * Adding busy indicators to submit buttons * ...
🌐
Medium
medium.com › @me_74372 › demystifying-the-usenavigation-hook-in-react-navigation-db060866d375
Demystifying the ‘useNavigation’ Hook in React Navigation | by Elwood S. Berry III - Frontend Developer/Designer | Medium
May 24, 2023 - The ‘useNavigation’ hook is a custom hook provided by React Navigation that allows components to access the navigation object and perform navigation actions within a navigation container.
🌐
React Navigation
reactnavigation.org › docs › navigating
Moving between screens | React Navigation
The navigation object is available in your screen components through the useNavigation hook: ... import * as React from 'react'; import { View, Text } from 'react-native'; import { createStaticNavigation, useNavigation, } from '@react-navig...
🌐
LogRocket
blog.logrocket.com › home › react native navigation: tutorial with examples
React Native Navigation: Tutorial with examples - LogRocket Blog
June 4, 2024 - The useNavigation Hook is imported from the @react-navigation/native module and it returns a navigation object with programmatic actions.
🌐
Medium
medium.com › react-native-journal › mastering-react-native-navigation-for-beginners-2025-edition-44b42cced32d
Mastering React Native Navigation for Beginners (2025 Edition) | by Suresh Kumar Ariya Gowder | React Native Journal | Medium
October 28, 2025 - You saw how to pass parameters between screens, nest navigators and leverage hooks like useNavigation, useRoute, useFocusEffect and useIsFocused to make your components responsive to navigation state.