是否可以在React Navigation的navigationOptions中访问非静态方法?

时间:2017-11-02 02:47:06

标签: javascript reactjs react-native ecmascript-6

在我的表单中,我需要在标题右侧有一个提交按钮,该按钮调用与表单底部的提交按钮相同的方法。

React Navigation要求您声明一个名为navigationOptions的静态方法,以便为每个屏幕传递导航器。

问题是我需要从我的两个按钮访问onFormSubmit()函数,显然你无法在静态方法中访问this

有什么方法可以解决这个问题吗?我尝试在导航标题之外自己创建一个按钮,使其具有绝对位置,但我无法设法让它超越标题。

export default class EnterBookDetailsScreen extends Component {
  static navigationOptions = ({ navigation }) => ({
    headerRight: (
      <Button
        text="submit"
        primary
        raised
        style={{ container: { margin: 10 } }}
        // Is this possible?
        onPress={() => this.onFormSubmit()}
      />
    ),
  })

onFormSubmit() {
.
.
.

这是我所拥有的截图,以便问题更有意义(有问题的提交按钮是右上角的那个): enter image description here

1 个答案:

答案 0 :(得分:2)

static navigationOptions = ({ navigation }) => {
  const { params = {} } = navigation.state;

  return {
    headerRight: (
      <Button
        text="submit"
        primary
        raised
        style={{ container: { margin: 10 } }}
        onPress={() => params.onFormSubmit()}
      />
    ),
  }
}

componentDidMount() {
  const { navigation } = this.props;

  navigation.setParams({
    onFormSubmit: this.onFormSubmit,
  });
}

onFormSubmit = () => {
  ...
}

我正在使用版本1.0.0-beta.11