Отправка не функция React Redux Typescript - PullRequest
0 голосов
/ 07 февраля 2019

Возникли проблемы с доступом к избыточному методу отправки внутри реквизита.При вызове handleSubmit из redux-формы метод dispatch возвращает «dispatch is not function».

Я попытался добавить действие к различным интерфейсам, которые я передавал в компонент.Порядок параметров, которые я передаю в connect, выглядит правильным, а также синтаксис, который я использую для передачи действия интерфейсам, передаваемым компоненту.

PropsFromDispatch содержит действие loginRequest, которое я сопоставляю с реквизитами в методе MapDispatchToProps.

export interface IAppProps {
  loggingIn: any;
}

export interface IAppState {
  user: GetTokenRequest;
  submitted: boolean;
  validate: {
    emailState:string
  }

}

interface PropsFromDispatch {
  loginRequest: (username: string, password:string) => void;
}

type AllProps = IAppProps & PropsFromDispatch & ConnectedReduxProps & 
IAppState

export default class LoginPage extends React.Component<AllProps, IAppState, 
PropsFromDispatch> {
  constructor(props: AllProps) {
    super(props);

    this.state = this.getInitState();

    this.handleUserNameChange = this.handleUserNameChange.bind(this);
    this.handlePasswordChange = this.handlePasswordChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  private getInitState(): IAppState {


  //Where I'm getting the error
  handleSubmit(e: { preventDefault: () => void; }) {
    e.preventDefault();

    this.setState({ submitted: true });
    const { username, password } = this.state;
    const {dispatch} = this.props
    if (username && password) {
       this.props.loginRequest(username, password)
       //have also tried 
       dispatch(loginRequest(username,password))
    }
  }


render() {
    const {loggingIn} = this.props
    const {username, password} = this.state;
    return (
      <Container>
        <h3>Sign In</h3>
        <Form>
          <Col>
            <FormGroup>
              <Label>Username</Label>
              <Input
                name="email"
                id="exampleEmail"
                placeholder="firstname.lastname"
                value={ username }

                onChange={ (e) => {this.handleUserNameChange(e)} } />
              <FormFeedback valid>
                Valid Username
              </FormFeedback>
              <FormFeedback>
                Invalid UserName
              </FormFeedback>
              <FormText>Windows Login</FormText>
            </FormGroup>
          </Col>
          <Col>
            <FormGroup>
              <Label for="password">Password</Label>
              <Input
                type="password"
                name="password"
                id="password"
                placeholder="********"
                value={ password }
                onChange={ (e) => this.handlePasswordChange(e) }
            />
            </FormGroup>
          </Col>
          <Button onClick={(e: any) => 
this.handleSubmit(e)}>Submit</Button>
      </Form>
      </Container>
    );
  }
}

function mapStateToProps(state: { authentication: { loggingIn: any; }; }) {
  const { loggingIn } = state.authentication;
  return {
  loggingIn
  };
}

const mapDispatchToProps = (dispatch: Dispatch<any>): PropsFromDispatch => 
{
  return {
    loginRequest: (username: string, password: string) => 
dispatch(loginRequest(username,password))
  }

}

const connectedLoginPage = connect(mapStateToProps, mapDispatchToProps) 
(LoginPage);
export { connectedLoginPage as LoginPage };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...