如何将初始道具(或启动选项)传递给第一个场景?

How do I pass initial props (or launchoptions) to first scene?

我通过 launchoptions.

在 Android 中设置一个简单的道具,将数据从 Android Native 发送到 React Native

我在 react-native 模块中成功接收了初始道具,但现在当我像这样使用 StackNavigator 时:

const RootStack = createStackNavigator(
    { 
        home: Details,
        genre: Genre,
    },
    { 
        initialRouteName: 'home',
    }
);
const AwesomeProject = createAppContainer(RootStack);
export default AwesomeProject;

现在我无法在 HomeScreen 的构造函数中使用我的 Prop。如何将我的初始道具传递到 home 屏幕?

我使用的react-native版本是0.58.4

这是完整的 React-Native 代码:

import { 
  createStackNavigator, 
  createAppContainer 
} from 'react-navigation';

import Genre from './app/Genre';
import Details from './app/Details';

const RootStack = createStackNavigator(
    { 
        home: Details,
        genre: Genre,
    },
    { 
        initialRouteName: 'home',
    }
);

const AwesomeProject = createAppContainer(RootStack);
export default AwesomeProject;

这是 Android 代码:

@Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegate(this, getMainComponentName()) {
            @Nullable
            @Override
            protected Bundle getLaunchOptions() {
                Bundle bundle = new Bundle();
                String str = MainActivity.getMovieID();
                bundle.putString("movie_id", str);
                return bundle;
            }
        };
    }

我的问题和这个完全一样: https://github.com/react-navigation/react-navigation/issues/634

但问题是用户给出的解决方案是针对旧版本的反应,在新的react-navigation-3中你必须直接设置你的应用程序容器,所以他的解决方案不起作用。

请帮忙。

根据文档,您可以将 params 定义到您的路线

终于让它工作了,并且成功地将 initialProps 从原生 android 发送到 react-native 的第一个 StackNavigator 场景,如下所示:

const StackNavigator = createStackNavigator(
    { 
        home:  {screen: Details},
        genre: {screen: Genre},
    },
    { 
        initialRouteName: 'home',
    }
);

const RootStack = createAppContainer(StackNavigator)

export default class AwesomeProject extends Component {
    constructor(props){
        super(props)
    }

    render() {
    return <RootStack screenProps={this.props.movie_id} />;
  }
}