我使用React-Navigation使用以下导航器:
const Navigator = StackNavigator(
{
Home: {
screen: Home
},
User: {
screen: User
}
}
)
我的User
组件:
export default class User extends Component {
static navigationOptions = {
title: () => 'User'
}
render() {
return (
<Text>This is the user page.</Text>
)
}
}
我希望User
场景导航栏的标题是用户名。该名称保持在Redux状态。
由于我正在访问User
场景中的Home
场景,因此我可以在推送场景时传递用户名称:
this.props.navigation.navigate('User', {name: user.name})
但是,如果在User
上更新了用户名,则导航标题将不会更新。我能看到的唯一解决方案是从navigationOptions
内访问Redux状态。有没有办法做到这一点或更好的方法来处理这个问题?感谢。
答案 0 :(得分:5)
我在issue的反应导航GitHub回购中找到了2个答案。
1)每次道具更改时都更新this.props.navigation.state:
componentWillReceiveProps(nextProps) {
if (nextProps.totalCharge) {
this.props.navigation.setParams({ totalCharge });
}
}
2)创建连接到Redux状态的NavigationTitle组件:
static navigationOptions = {
title: (navigation) => <MyConnectedTitle navigation={navigation} />
}
答案 1 :(得分:1)
我假设你正在打电话
this.props.navigation.navigate('User', {name: user.name})
来自组件。因此,您应该在组件中mapStateToProps
使用用户的名称,然后将其作为{name: ...
变量传递。
例如:
export class Component {
render() {
return (
<View>
<Button onPress={() => this.props.navigation.navigate('User', {name: this.props.userName})}
</View>
)
}
}
const mapStateToProps = (state) => ({
userName: state.user.name
})
export default connect(mapStateToProps)(Component)