setParams 在 react-native 中不起作用

Posted

技术标签:

【中文标题】setParams 在 react-native 中不起作用【英文标题】:setParams not working in react-native 【发布时间】:2018-05-01 02:02:57 【问题描述】:

我正在使用 react-native 和 redux。我正在尝试更新当前屏幕的参数,以便可以在顶部栏中使用的组件中访问它们,但参数未设置。 我的代码如下:

画面路线:

AlertNameForm: 
    screen: AlertNameForm,
    navigationOptions: (navigation) => CancelAndDone(navigation)
  

组件屏幕:在 componentDidMount 我正在设置参数。

class AlertNameForm 
    ..........
    componentDidMount() 
    this.props.navigation.setParams(onDonePress: this.onDonePress)
    

    onDonePress: () => 
      // want to access this function in top-bar buttons.
    

以下是其他组件:

export const CancelAndDone = (navigation) => (
    headerLeft: <ButtonCancel navigation=navigation />,
    headerRight: <ButtonDone navigation=navigation />
)

const ButtonDone = withTheme((navigation, theme:  tertiaryColor  ) => (
  <Button color=tertiaryColor title="Done" onPress=() => 
      if (navigation.state.params && navigation.state.params.onDonePress) 
        navigation.state.params.onDonePress()
      
      else 
        navigation.dispatch(NavigationActions.back())
      
     />
))

但在 ButtonDone 组件中我无法访问功能 onDonePress 有没有其他方法可以在 react-native 中为当前屏幕设置参数。

【问题讨论】:

你的意思是你想在 navigationOptions 中访问 onDonePress 吗?你可以为更清晰的代码创建一个 jsfiddle。 【参考方案1】:

您可以按如下方式在目标组件内分配功能:

componentDidMount = () => 
   const  navigation  = this.props
     navigation.setParams(
        onDonePress: () => this.myFunction(),
     )


myFunction = () =>  /*body function*/ 

在您的页眉或页脚组件调用中:

navigation.state.params.onDonePressroute.params.onDonePress 如果您使用 React Navigation v5。

【讨论】:

【参考方案2】:

您应该使用this.props 引用navigation.state.params,因为导航应该作为道具传递给该组件。

【讨论】:

以上是关于setParams 在 react-native 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在设置字符串值时优化函数调用? [关闭]

Solrj 与 Solr Suggester

React学习-Hook路由及URL管理

solr group分组排序的问题

React-Native + crypto:如何在 React-Native 中生成 HMAC?

React-Native 开发 在react-native 中 运用 redux