React-native-router-flux: 动态标题

创建于 2016-02-19  ·  23评论  ·  资料来源: aksonov/react-native-router-flux

你好,
感谢伟大的模块 - 他们有什么方法可以动态更改标题和导航栏的状态。

例如。
<Route key="UserCredentials" name="UserCredentials" hideNavBar={this.state.UserCredentialsNavBar} component={UserCredentials} initial={ false } title={this.state.title} schema="withoutAnimation" />

然后我会有一个监听器,它会改变状态 this.state.UserCredentialsNavBar 'true' 或 'false' 和 this.state.title 'Some title' 或 'Some other title'。

我试过了,但没有得到任何地方。

提前致谢。
:0)

最有用的评论

谢谢阿克索诺夫。
我可能没有正确理解你。
因此,例如,如果我想更改标题的状态。 我会打电话
Actions.refresh({title: 'Some other title'})
非常感谢您回复我。
:0)

所有23条评论

我刚刚添加了使用 Actions.refresh(props) 在没有导航器转换的情况下设置属性的支持,请尝试一下(版本 2.3.1)

谢谢阿克索诺夫。
我可能没有正确理解你。
因此,例如,如果我想更改标题的状态。 我会打电话
Actions.refresh({title: 'Some other title'})
非常感谢您回复我。
:0)

我的不好,一切都很好。 非常感谢您的帮助 aksonov。 非常感激。 :0)

我遇到了一个问题,这里似乎是动态设置标题的错误。 似乎 Actions.refresh 为所有路由设置了它,覆盖了它们的静态标题。

就我而言,我有一个主从设置,其中主路由有一个标题道具,而详细路由标题仅动态设置。 当我在详细路线中并且标题发生变化时,标题和后退按钮都更改为相同的文本。 当返回到 master 时,动态标题保持不变(而不是返回到它的模式标题)。

我是 React Native 的新手,所以我不确定这是否是设计使然...?

谢谢!

即使我目前不在那个场景中,有没有办法为特定场景设置它? IE

Actions.refresh({key: 'home', title: 'My new title'})

@greatwitenorth你的具体用例是什么?
例如,如果您使用键view2导航到视图,您可以使用这样的道具设置标题

Actions.view2({ title: 'My New Title' })

我的问题是我没有导航到需要更新标题的场景。 我的屏幕更新了用户的地址,但地址在一个完全独立的屏幕上显示为标题。

@greatwitenorth我遇到了同样的问题。 如何在不导航到更改了标题的新路线的情况下更改标题?

好的,我应该更好地阅读文档,只是
Actions.refresh({title: 'new title'})

@greatwitenorth你有没有找到合适的解决方案?
我正在从状态中获取标题,因此每当状态发生变化时,我都希望特定视图将该值作为标题。 有时人们会更改标题并通过后退按钮导航,在这种情况下,我似乎无法定义 {title: } 参数(并在后退动作中传递状态值),或者我错过了什么?

在组件的生命周期方法之一(或渲染)中刷新,会使应用程序崩溃,因为它可能由于状态属性更改而进入无限循环。

亲切的问候,

@JeroenNelen我遇到了类似的问题,并通过将刷新放入 ComponentDidMount 并在 Redux 减速器中设置状态来解决它 - 我将 Redux 操作绑定到每个更改标题的用户操作中,更新应用程序状态,并且刷新读取更新的道具也。

所以基本上类似于 ComponentDidMount 中的这一行:

Actions.refresh({title: this.props.state.myapp.myvalue})

@jondbm感谢您的建议,但我们决定切换到不同的导航器。

亲切的问候,

@JeroenNelen你现在使用哪个导航器? (如果你不介意分享)

为什么下面的设置没有刷新右键? console.log 写入新值,但正确的标题永远不会刷新?

const RouterWithRedux = connect()(Router);

export class App extends Component {

  constructor(props) {
    super(props);
  }

  render() {
    let title = '(' + this.props.basket.length + ')';
    console.log(title);
    return (
      <RouterWithRedux rightTitle={title} onRight={() => alert('All right')}>
        <Scene key="root">
          <Scene key="home" component={Main} title="Main"/>
          <Scene key="page1" component={SomePage} title="SomePage"/>
        </Scene>
      </RouterWithRedux>
    );
  }
}
App.propTypes = {
  dispatch: PropTypes.func.isRequired
};

// Wrap the component to inject dispatch and state into it
export default connect(
  state => {
    return {basket: state.basket.items}
  }
)(App);

@jaynakus righttitle 还是右键?

标题!

我建议使用自定义导航栏,无论您想在其中做什么。

@jaynakus尝试将您的 rightTitle 和 onRight 放入您的 Scene 组件而不是顶部 RouterWithRedux 级别,这可能会起作用。

@jondbm将它们放入根场景并没有解决,但是在 componentWillReceiveProps 中调用 Actions.refresh() 可以解决问题;)

const RouterWithRedux = connect()(Router);

export class App extends Component {

  constructor(props) {
    super(props);
  }

  componentWillReceiveProps(nextProps) {
    if (this.props.basket.length !== nextProps.basket.length) {
      console.log(nextProps.basket.length);
      let title = '(' + nextProps.basket.length + ')';
      Actions.refresh({rightTitle: title});
    }
  }

  render() {
    let title = '(' + this.props.basket.length + ')';
    return (
      <RouterWithRedux>
        <Scene key="root" rightTitle={title} onRight={() => alert('All right')}>
          <Scene key="home" component={Main} title="Main"/>
          <Scene key="page1" component={SomePage} title="SomePage"/>
        </Scene>
      </RouterWithRedux>
    );
  }
}
App.propTypes = {
  dispatch: PropTypes.func.isRequired
};

// Wrap the component to inject dispatch and state into it
export default connect(
  state => {
    return {basket: state.basket.items}
  }
)(App);

看这里: https :

这太棒了,有没有一种干净的方法在切换时淡入/淡出标题? 就我而言,当用户滚动超过 100 像素时,我会切换标题。 淡化过渡会很好。 干杯。

@greatwitenorth你的具体用例是什么?
例如,如果您使用键view2导航到视图,您可以使用这样的道具设置标题

```js
Actions.view2({ title: '我的新标题' })

我们如何在安装文件中访问它?

如果我有这样的配置:

<Router>
                    <Scene key="root" navBar={NavBar}>
                        <Scene
                            hideNavBar
                            key="login"
                            component={Login}
                            initial
                        />

                        <Scene drawer
                               drawerPosition="right" drawerWidth={300}
                               key="task"
                               contentComponent={DrawerView}
                               drawerIcon={drawerIcon}
                               rightButtonImage="menu"
                               onRight={() => {
                                   Actions.drawerOpen()
                               }} hideNavBar
                        >

                            <Scene key="taskInner"
                                   leftButtonImage="arrow-back"
                                   component={TaskView}
                                   onLeft={() => {
                                       Actions.popTo('tasksList')
                                   }}
                            />
                        </Scene>

                    </Scene>
</Router>

然后 Actions.task({ title: 'My New Title' }) 或 Actions.refresh({title: "My New Title"}) 不起作用。 有抽屉时如何设置标题或发送一些属性?

此页面是否有帮助?
0 / 5 - 0 等级