Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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
Reactjs 导航-替换场景视图中的NavigationHeader标题_Reactjs_React Native - Fatal编程技术网

Reactjs 导航-替换场景视图中的NavigationHeader标题

Reactjs 导航-替换场景视图中的NavigationHeader标题,reactjs,react-native,Reactjs,React Native,我正在尝试从特定场景的视图更新NavigationHeader标题(以及左组件和右组件) 例如: 用户导航到纵断面图 从服务器获取数据 调用redux操作以使用用户名更新导航标题 我目前的方法效果不太好。我正在尝试使用NavigationStateUtils将场景替换为其自身的更新版本。如果我的视图是堆栈中的第一个视图,则此操作有效。但是,如果我尝试在非第一条路线上添加更新导航标头的调用,它将冻结,因为导航尚未完成动画 我可以尝试在通话中添加一个超时,但提出一个在全球范围内有意义的延迟似乎有点不

我正在尝试从特定场景的视图更新NavigationHeader标题(以及左组件和右组件)

例如:

  • 用户导航到纵断面图
  • 从服务器获取数据
  • 调用redux操作以使用用户名更新导航标题
  • 我目前的方法效果不太好。我正在尝试使用NavigationStateUtils将场景替换为其自身的更新版本。如果我的视图是堆栈中的第一个视图,则此操作有效。但是,如果我尝试在非第一条路线上添加更新导航标头的调用,它将冻结,因为导航尚未完成动画

    我可以尝试在通话中添加一个超时,但提出一个在全球范围内有意义的延迟似乎有点不妥

    case UPDATE_NAV_HEADER: {
      const tabs = state.get('tabs')
      const tabKey = tabs.getIn(['routes', tabs.get('index')]).get('key')
      const scenes = state.get(tabKey).toJS()
      const route = scenes.routes.slice(-1)[0]
    
      var leftComponent = null
      if (action.payload.leftComponent) {
        leftComponent = action.payload.leftComponent
      } else if (route.navLeftComponent) {
        leftComponent = route.navLeftComponent
      }
    
      var rightComponent = null
      if (action.payload.rightComponent) {
        rightComponent = action.payload.rightComponent
      } else if (route.navRightComponent) {
        rightComponent = route.navRightComponent
      }
    
      const newScene = NavigationStateUtils.replaceAt(
        scenes,
        route.key,
        {
          key: route.key,
          title: action.payload.newTitle ? action.payload.newTitle : route.title,
          navLeftComponent: leftComponent,
          navRightComponent: rightComponent,
          shouldRenderHeader: "shouldRenderHeader" in route ? route.shouldRenderHeader : true,
          shouldRenderTabBar: "shouldRenderTabBar" in route ? route.shouldRenderTabBar : true
        }
      )
    
      return state.set(tabKey, fromJS(newScene))
    }