Dispatch an action in react-redux
In this chapter, we will learn how to dispatch an action in react-redux. In the login form, there is a button login, when a customer clicks on the button we want to submit the form.
import React, { useState } from 'react'; import { connect } from 'react-redux'; import { emailValidator, passwordValidator } from '../../utils/validation'; const LoginForm = (props) => { const [email, setEmail] = useState({ value: '', error: '', class: '' }); const [password, setPassword] = useState({ value: '', error: '', class: '' }); const [isFormValid, setisFormValid] = useState(false); const validateForm = () => { const validateEmail = emailValidator(email.value); const validatePassword = passwordValidator(password.value); if (validateEmail) { setEmail({ ...email, error: validateEmail.message, class: validateEmail.class }); setisFormValid(false); return false; } if (validatePassword) { setPassword({ ...password, error: validatePassword, class: validatePassword.class }); setisFormValid(false); return false; } setisFormValid(true); return true; } return ( <div className='form'> <h1>Enter credentials</h1> <input type="text" name="email" value={email.value} className={email.class} placeholder="Email" onChange={e => setEmail({ value: (e.target.value), error: '', class: '' })} onBlur={()=>validateForm()} /> <input type="password" name="password" className={password.class} value={password.value} onChange={e => setPassword({ value: (e.target.value), error: '', class: '' })} placeholder="Password" onBlur={()=>validateForm()} /> <button disabled={!isFormValid} onClick={props.onLogin}>Login</button> </div> ) } const mapStateToProps = state => { return { isEmployeeLoggedIn: state.login.isEmployeeLoggedIn } } const mapDispatchToProps = dispatch => { return { onLogin: () => dispatch({ type: 'LOGIN' }) } } export default connect(mapStateToProps, mapDispatchToProps)(LoginForm);
As we can see in the above code snippet, when a customer clicks on the login button, we are dispatching an action of type LOGIN. In the button onClick we have used props.onLogin.