如何从另一个类React Native中更改navigationOptions

时间:2018-06-28 20:45:59

标签: android reactjs react-native react-navigation

我想从另一个这样的班级更改班级标题:

这是第二堂课,我想通过按钮更改第一堂课的标题:

export default class lingua extends React.Component { 
cambiolingua= () =>
{   
const registra = new Registra(); //in this class I want to change title
registra.ChangeTitle('New Title');

this.props.navigation.navigate('Registra')
}

这是我需要更改标题的第一堂课

export default class Registra extends React.Component {
static navigationOptions = ({ navigation }) => {
const {state} = navigation;
return {
  title: `${state.params.title}`,
};
};

 ChangeTitle = (titleText) => {
  const {setParams} = this.props.navigation;
  setParams({ title: titleText })
 }

但是我收到错误消息“未定义不是对象(正在评估'_this.props.navigation')

我该如何解决?

1 个答案:

答案 0 :(得分:0)

首先,错误源于您在课程navigation中没有道具lingua的事实。这可以通过以下事实来解释:lingua不是stackNavigator中的场景(或任何来自反应导航的导航器)。

有2种解决方案: 1)将导航道具从堆栈中的屏幕向下传递到此组件。 2)您可以使用withNavigation的高阶组件react-navigation将其添加到lingua

示例:

import {withNavigation} from 'react-navigation'

class tmp extends React.Component {

  render() {
    const {navigation} = this.props; //with the withNavigation, you have access to the navigation even though it is not a screen

    return <View />
  }
}

export default withNavigation(tmp);

比起更新navigationOptions,更改标题的更好方法是直接向其发送标题,以导航至Registra

// In lingua
this.props.navigation.navigate('Registra', {title: 'You custom title'})

这样做,您不必在Registra中调用方法来更新标题

希望有帮助!