2017-10-16 75 views
0

我想添加一个'重新加载'按钮到我的头,我通过调用setParams。问题是,这会导致与TabNavigator在推出导航到标签React导航 - 设置参数,无需导航到现场

export default class FeedScreen extends React.Component { 
    static navigationOptions = ({ navigation }) => { 
     const { params } = navigation.state; 
     if (params) { 
      return { 
       headerRight: <Icon.Button 
        color="black" 
        backgroundColor="transparent" 
        underlayColor="transparent" 
        name="reload" 
        onPress={ params.reload } 
       /> 
      }; 
     } 
    } 

    constructor (props) { 
     super(props); 

     // We want to set attach a reload function to the navigation 
     this.props.navigation.setParams({ 
      reload: this._reloadFeed.bind(this) 
     }); 
    } 

那么,有没有办法setParams无法浏览到这一幕,或者是有分配的功能,以这个图标不调用setParams的方法吗?

回答

0

您是否尝试将onPress = {params.reload}设置为onPress = {()=> params.reload()}?

export default class FeedScreen extends React.Component { 
    static navigationOptions = ({ navigation }) => { 
     const { params } = navigation.state; 
     if (params) { 
      return { 
       headerRight: <Icon.Button 
        color="black" 
        backgroundColor="transparent" 
        underlayColor="transparent" 
        name="reload" 
        onPress={() => params.reload() } < ----- 
       /> 
      }; 
     } 
    } 

    constructor (props) { 
     super(props); 

     // We want to set attach a reload function to the navigation 
     this.props.navigation.setParams({ 
      reload: this._reloadFeed.bind(this) 
     }); 
    } 
+0

没有有所作为 – user1537360

0

您可能正在寻找Navigation Actions,特别是导航的行动,被称为“setParams”(不带navigation.setParams()混淆),你派遣这样:navigation.dispatch(myCreatedSetParamsAction)

+0

不幸的是这还是引起了导航到场景 – user1537360

+0

@ user1537360也许你不需要。绑定哟你的_reloadFeed函数。另外,也许,你应该在navigatorConfig中设置initialRouteParams,而不是在构造函数中设置setParams。 – Eduard

0

我能够解决此从头文件中调用一个静态函数,然后将这个静态函数更新到componentDidMount中的重装函数中。这是hacky,但工程。我的组件外

功能:

let _reloadFunction =() => { 
    // This exists because react navigation is a mess 
} 

导航选项

static navigationOptions = { 
     headerRight: <Icon.Button 
         color="black" 
         backgroundColor="transparent" 
         underlayColor="transparent" 
         name="reload" 
         onPress={() => { _reloadFunction() }} 
        /> 
    } 

在组件:

 // Gonna update that reloadFunction so the header works 
     _reloadFunction = this._reloadFeed.bind(this);