在我看来,rn可以看做是activity的一个覆盖层,类似于fragment。a给b传值,需要一个自定义MyReactDelegate
在网上查了一些资料,归纳总结如下:原生界面
public class AboutUs extends ReactActivity {//继承reactactivity
@Override
protected String getMainComponentName() {
return "AboutUs";// 启动rn的标识
}
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new MyReactDelegate(this, getMainComponentName());
}
// 自定义MyReactDelegate
class MyReactDelegate extends ReactActivityDelegate {
public MyReactDelegate(Activity activity, @javax.annotation.Nullable String mainComponentName) {
super(activity, mainComponentName);
}
@javax.annotation.Nullable
@Override
protected Bundle getLaunchOptions() {
Bundle bundle = new Bundle();
bundle.putString("uid", MainApplication.user_id);
//把一个值传递过去,uid可以自己定义,如果是传递多个值,可以多bundle几个。
return bundle;
}
}
}
rn界面:
render() {
var uid = this.props.uid;//这里就可以取值
}
当然此方法有局限性,如果rn界面export 多个界面,如下:
const App = StackNavigator({
bjsingle: { screen: BJsingle },
chosefly: { screen: Chosefly },
CityList: { screen: CityList },
receipt: { screen: Receipt },
}, { headerMode: 'none', });
export default App;
那么你会发现,值是传递过来了,但是就是接收不到。这就是此方法的传值的缺点。也就是说,只能适用于直接是export default class AboutUs这种方式。
当然还有更好的方式,可以参考我的另一篇博客