Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 如何在react native的导航选项中使用redux状态值?_React Native - Fatal编程技术网

React native 如何在react native的导航选项中使用redux状态值?

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

我想从存储在我的redux状态的对象设置我的navgationOptions头。我尝试了以下方法,结果显示currentWorkout未定义。我应该做些什么来克服这个错误?使用来自redux的值设置navigationOption属性的正确方法是什么

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并从存储中检索标题。