功能调用。无法在可能未定义的值上调用函数

时间:2017-07-14 21:27:27

标签: reactjs flowtype

我有以下反应组件

//@flow

import React from 'react';
import { connect } from 'react-redux';
import { submit } from 'redux-form';
import { Button } from 'ds-component-library';
import styles from './ApplicationLayout.scss';
import cs from 'classnames';

const RemoteSubmitButton = ({
  dispatch,
  form
}: {
  dispatch: void,
  form: string
}) =>
  <Button
    primary
    className={cs(styles['button-next'])}
    onClick={() => dispatch(submit(form))}
  >
    Next
  </Button>;

RemoteSubmitButton.displayName = 'RemoteSubmit';

export default connect()(RemoteSubmitButton);

运行flow时出现以下错误:

onClick={() => dispatch(submit(form))}
                        ^^^^^^^^^^^^^^^^^^^^^^ function call. Function cannot be called on possibly undefined value
onClick={() => dispatch(submit(form))}
                        ^^^^^^^^ undefined

2 个答案:

答案 0 :(得分:1)

解释器对于在解构时将dispatch的类型定义为无效这一事实感到不满意,它假定它可能未定义,但是,当单击该按钮时,您总是调用该函数。 / p>

一种可能的解决方案可能是提取对函数的调度调用,并检查调度是否未首先定义。

答案 1 :(得分:0)

如果我正确理解了错误消息,问题可能是调用submit(form)可能会返回undefined并且这会导致问题,因为dispatch函数需要调用一个非未定义的论点。

submit的注释都是错误的,或者您需要先检查其返回值,然后再将其传递给dispatch