Learn once, navigate anywhere.
React Navigation is the result of a collaboration between developers from Facebook, Expo and the React community at large: it replaces and improves upon several navigation libraries in the ecosystem, including Ex-Navigation, React Native's Navigator and NavigationExperimental components.
- Community contributions
- Code of conduct
Since the library is a JS-based solution, to install the latest version of react-navigation you only need to run:
yarn add react-navigation
npm install --save react-navigation
React Navigation API
A lot of developers poured their knowledge in blog posts, and other repos - we will try to keep here a list of tutorials and resources to help someone who wants to learn about React Navigation and techniques to handle navigation effectively.
Introduction to the library
- Basic ReactNavigation Example App and Tutorial
- Understanding Navigation in React Native
- Comprehensive routing and navigation in React Native made easy
- Replace a Screen Using React Navigation
- Using React Navigation and Redux in your React Native Application
- React-Navigation, complete Redux state management, tab-bar, and multiple navigators
- Custom Drawer with React-Navigation in React-Native
- React Navigation Drawer - a tutorial series
Comparisons and Discussion
- Migrate from ExNavigation to React Navigation
- Playing with React Navigation and Airbnb's Native Navigation
- How we restructured our app with React Navigation
- What’s Happening with Navigation in React Native?
When is version 1.0.0 going to be released?
(in the meantime, you can find the changelog for every release here)
I'm having troubles using the library, what can I do?
Head to the issues and do a quick search: if you think you are experiencing a bug chances are somebody already opened an issue for it. If instead you are having more general problems, use Stack Overflow - which is better suited and helps keeping the Issues section of the repo clean. Alternatively you could join the Reactiflux community on Discord where there are React Native and React Navigation channels with helpful people who might be able to answer you.
You should only open a new issue if you believe that you are experiencing a bug or have a feature request, and please follow the dedicated template - it will help everyone helping you (and may get closed if it doesn't).
How can I help?
Glad you ask! This library is a community effort: it can only be great if we all help out in one way or another
Responding to one of the open issues. Even if you can't resolve or fully answer a question, asking for more information or clarity on an issue is extremely beneficial for someone to come after you to resolve the issue.
Creating public example repos of navigation problems you have solved.
Answering questions on Stack Overflow. Alternatively, asking questions on Stack Overflow instead of opening an issue.
Answering questions in our Reactiflux channel.
Providing feedback on the open PRs.
If you feel brave enough you can submit a PR: follow the Contributors guide to find out how. If you don't know where to start, check the ones with the label
Type: Good First Task - even fixing a typo in the documentation is a worthy contribution!
Is this the only library available for navigation?
No: there are some other libraries - which, depending on your project, can be better or worse suited for your project. They differ in the approach and implementation from
react-navigation, but share the common goal of helping you create a good React Native application; you can find a general round up in the React Native docs.
Can I use this library for web?
This library originally planned to support web too - but at the moment it is not a priority for v1.0; a lot of work is necessary to reach it as-is and we had to freeze this support (consider it "experimental").
Code of conduct
This library has adopted a Code of Conduct that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be tolerated.
React-navigation is licensed under the BSD 2-clause "Simplified" License.