Возникли проблемы с доступом к избыточному методу отправки внутри реквизита.При вызове 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 };