React native 如何在react native的导航选项中使用redux状态值?
我想从存储在我的redux状态的对象设置我的navgationOptions头。我尝试了以下方法,结果显示currentWorkout未定义。我应该做些什么来克服这个错误?使用来自redux的值设置navigationOption属性的正确方法是什么React native 如何在react native的导航选项中使用redux状态值?,react-native,React Native,我想从存储在我的redux状态的对象设置我的navgationOptions头。我尝试了以下方法,结果显示currentWorkout未定义。我应该做些什么来克服这个错误?使用来自redux的值设置navigationOption属性的正确方法是什么 class WorkoutDetailScreen扩展组件{ 建造师(道具){ 超级(道具); } componentDidMount(){ const workoutId=this.props.navigation.state.params; t
class WorkoutDetailScreen扩展组件{
建造师(道具){
超级(道具);
}
componentDidMount(){
const workoutId=this.props.navigation.state.params;
this.props.getWorkout(workoutId);
//this.props.navigation.setParams({
//currentWorkout:this.props.currentWorkout
// });
}
render(){
返回(
{this.props.currentWorkout.workoutName}
);
}
//导航选项
静态导航选项=({navigation})=>{
const{params={}}=navigation.state;
返回{
//如何使用this.props.currentWorkout.workoutName的值设置headerTitle?
headerTitle:this.props.currentWorkout.workoutName,
头饰样式:{
宽度:“100%”,
对齐项目:“中心”
},
头型:{
paddingRight:10,
paddingLeft:10
}
};
};
}
常量mapStateToProps=状态=>{
返回{
当前训练:state.workouts.currentWorkout
};
};
const mapDispatchToProps=调度=>{
返回{
getWorkout:bindActionCreators(getWorkout,dispatch)
};
};
导出默认连接(MapStateTrops、mapDispatchToProps)(
工作细节屏幕
)
) 使用react navigation 2.0, 我的猜测是,你可能想做如下事情:
class WorkoutDetailScreen extends Component {
static navigationOptions = ({ navigation }) => {
let workoutName = 'DEFAULT_VALUE'
if (navigation.state.params) workoutName = navigation.state.params.workoutName
return {
headerTitle: workoutName,
headerTitleStyle: {
width: "100%",
alignItems: "center"
},
headerStyle: {
paddingRight: 10,
paddingLeft: 10
}
};
};
constructor(props) {
super(props);
}
componentDidMount() {
const { workoutName } = this.props.currentWorkout;
this.props.navigation.setParams({
params: { workoutName },
key: this.props.navigation.state.key
})
}
render() {
return (
<View>
<Text>{this.props.currentWorkout.workoutName}</Text>
</View>
);
}
}
const mapStateToProps = state => {
return {
currentWorkout: state.workouts.currentWorkout
};
};
const mapDispatchToProps = dispatch => {
return {
getWorkout: bindActionCreators(getWorkout, dispatch)
};
};
export default connect(mapStateToProps, mapDispatchToProps)(
WorkoutDetailScreen
)
class WorkoutDetailScreen扩展组件{
静态导航选项=({navigation})=>{
让workoutName='默认值'
if(navigation.state.params)workoutName=navigation.state.params.workoutName
返回{
标题:workoutName,
头饰样式:{
宽度:“100%”,
对齐项目:“中心”
},
头型:{
paddingRight:10,
paddingLeft:10
}
};
};
建造师(道具){
超级(道具);
}
componentDidMount(){
const{workoutName}=this.props.currentWorkout;
this.props.navigation.setParams({
参数:{workoutName},
key:this.props.navigation.state.key
})
}
render(){
返回(
{this.props.currentWorkout.workoutName}
);
}
}
常量mapStateToProps=状态=>{
返回{
当前训练:state.workouts.currentWorkout
};
};
const mapDispatchToProps=调度=>{
返回{
getWorkout:bindActionCreators(getWorkout,dispatch)
};
};
导出默认连接(MapStateTrops、mapDispatchToProps)(
工作细节屏幕
)
这不是一个理想的解决方案,因为它现在需要上一条路线在导航参数中传递训练名称。更好的替代方法是使用自定义的标题
组件(分配给导航选项
中的标题
),该组件是连接
-ed并从存储中检索标题。