That's a whole lot to unpack in one SO question, so you're probably going to be better served by doing some research and then splitting this question into several smaller questions. Here's some pointers to get you started.
Overall: The purpose of the new NavigationExperimental is to create a stateless navigation structure for React Native, following the same principles as React. The old Navigator component was more reliant on maintaining and mutating state than the new NavExp. If you think about how React likes to take a set of props and then render out a full new UI whenever something changes, the new NavExp is meant to facilitate that a little more.
This because even more useful when you use a Flux-like pattern for managing state in your application. I would suggest reading up on Flux, or in my opinion, the more easy to grasp Redux implementation of the pattern.
That answers to an extent #1, and you'll better understand the answer to #2 after going through those links.
NavigationRootContainer is a helpful element (though not necessary) that provides some of the structure and functionality when using NavExp. The examples from Facebook utilize it. If you are implementing NavExp with something like Redux, you do not need to use one because you would be duplicating the usage of reducers.
I'm assuming you are talking about the states when deciding to render out the appropriate scene/card/screen? These can be declared anywhere, and really are just strings. You don't even need to declare them anywhere.
State is the collection of data and variables that make up the moving parts of your application. For example, if you had a shopping cart app you would store the customer's name and the contents of their cart in your application's state, as well as what screen they were currently on, what screen they had previously been on, etc. Anything that can change goes in state.
Actions are like shooting a flare into the sky to alert other parts of your application that something has changed. User adds a new item to their cart? Send an ITEM_ADDED_TO_CART
action, along with the ID of the item. User presses a button to the main screen? Send a NAVIGATE_TO_SCREEN
action, along with an identifier for the home screen. Actions get processed by reducers, and reducers make changes to the state and then tell React Native to start re-rendering everything.
- This wasn't formed as a question, but you have a
renderScene
method with NavExp as well, which functions in a nearly identical way: it spits out the contents of the screen, whatever it should be.
(FYI, I don't have any official word on this, but if you are already comfortable with Navigator and have implemented it, you are probably fine continuing with it for the foreseeable future, instead of rewriting your app to take advantage of NavigationExperimental.)