反应天然路由器通量。如何以编程方式更改自定义navBar?

时间:2017-05-03 15:01:35

标签: react-native react-native-router-flux

我的场景中有自定义导航栏:

<Scene key="myPage"
    component={MyPage}
    navBar={NavBarCustom}
    hideNavBar={false}/>

...

class NavBarCustom extends Component {

  constructor(props) {
      super(props);
  }

  onExitPressed(){
    App.exit();
  }

  render() {
    return (
      <View style={styles.navBar}>

        <View style={styles.leftContainer}>
          <Image 
            style={styles.logo} 
            source={require('./../../res/ic_nav_bar.png')}/>
          <Text style={[appStyles.customFontBold, styles.title1]}>
            MY TITLE
          </Text>
        </View>

        <View style={styles.centralContainer}>
          <Text style={[appStyles.customFontRegular, styles.title2]}>
            {strings.benefit_identifier}
          </Text>
        </View>

        <View style={styles.rightButtonContainer}>
          <TouchableHighlight
            style={{padding: 7}}
            underlayColor='#b59d6e'
            onPress={() => { this.onExitPressed() }}>
            <Text style={[appStyles.customFontRegular, styles.rightButtonTitle]}>
              {strings.exit}
            </Text>
          </TouchableHighlight>
        </View>

      </View>
    );
  }
}

效果很好。那么如何从我的场景 MyPage 更改 NavBarCustom 的title1?

提前致谢。

2 个答案:

答案 0 :(得分:0)

场景采用标题参数

<Scene
  key="myPage"
  component={MyPage}
  navBar={NavBarCustom}
  hideNavBar={false}
  title="myPage"
/>

答案 1 :(得分:0)

您可以通过/ props传递/发送信息:

在渲染中,您可以声明constreact-native-router-flux Actions,设置要指向的路线,然后设置要传递的对象:

如果有登录主文件,然后重定向到注册视图,则声明const goToRegister,然后传递text及其内容:

class Login extends Component {
  render() {
    const goToRegister = () => Actions.Register({text: 'From Login'}); 
    return(
      <View style={{flex:1}}>
        <Text>
          Login
        </Text>
        <TouchableHighlight onPress={goToRegister} style={{ marginTop: 100}}>
          <Text>Go Register</Text>
        </TouchableHighlight>
      </View>
    )
  }
}

然后在您的注册表中,您只需在propsthis.props.text

收到
class Register extends Component {
  render() {
    return(
      <View style={{flex:1}}>
        <TouchableHighlight onPress={Actions.Login} style={{ marginTop: 100}}>
         <Text>{ this.props.text }</Text>
        </TouchableHighlight>
      </View>
    )
  }
}

在您的情况下,您应该首先发送您的标题的价值,如:

render() {
  const goToMyPage = () => Actions.MyPage({ title: 'Some Title'})
  ...

然后你就可以使用它了:

<Text style={[appStyles.customFontBold, styles.title1]}>
  { this.props.title }
</Text>