首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react导航v3通过AppContainer设置screenProps

react导航v3通过AppContainer设置screenProps
EN

Stack Overflow用户
提问于 2018-11-19 23:11:09
回答 1查看 4.6K关注 0票数 1

我需要传递主题设置到每个屏幕的导航选项。设置存储在redux中。在旧版本中,我会这样写:

代码语言:javascript
复制
const AppNavigator = StackNavigator({
  Home: { screen: MainList },
  Settings: { screen: Settings },
  NewEvent: { screen: NewEvent },
  Contacts: { screen: Contacts },
  Map: { screen: Map},
})

在渲染函数中...

代码语言:javascript
复制
<AppNavigator 
   screenProps={{
     settings: this.props.settings,
     headerTintColor: '#ffffff'
   }}
/>

...where props.settings是redux状态的一部分。在navigationOptions内部使用的

代码语言:javascript
复制
static navigationOptions = ({ navigation, screenProps }) => {
  let settings = screenProps.settings;
  let theme = settings? settings.theme: null;

  return {
    title: strings.account,
    headerTintColor: screenProps.headerTintColor,
    headerStyle: {backgroundColor: theme? theme.def.primaryColor: null}
  };
};

但是当我必须用createAppContainer包装我的导航器时,我现在该怎么做呢?在仿真器中使用navigation.setParams会造成明显的延迟,所以对我来说这不是一个合适的解决方案。记住主题可以随时改变!

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 23:33:21

你可以通过创建一个定制的导航器来实现这一点:

代码语言:javascript
复制
class NavWrapper extends Component {
  static router = AppNavigator.router;
  render() {
    const { navigation } = this.props;

    return <AppNavigator
      navigation={navigation}
      screenProps={{
        settings: this.props.settings,
        headerTintColor: '#ffffff'
      }}
    />;
  }
}

const AppNavWrapper = connect(state => ({settings: state.settings}))(NavWrapper);
const AppContainer = createAppContainer(AppNavWrapper);

然后在根组件中

代码语言:javascript
复制
render() {
  return (
    <AppContainer/>
  );
}

希望这能有所帮助:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53377536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档