Guys, I have been trying to implement redux-form with react native. The validate function in redux-form is not working as expected. On text change it doesn't trigger validate function and handleSubmit not sending form data on submitting.
import React, { Component } from 'react';
import { View, Text, TextInput, Button } from 'react-native';
import { reduxForm, Field } from 'redux-form';
import FormInput from '../../components/FormInput';
import FormTextInput from '../../components/FormTextInput';
const onSubmit = values => {
console.log(values, 'submitted values');
}
class UserDetails extends Component {
constructor(props) {
super(props);
this.state = {
value: '',
email: '',
mobNumber: '',
}
}
renderFormInput = ({ value, onChangeText, label, placeholder, keyboardType, meta: { touched, error }, ...restProps }) => {
console.log(restProps);
return (
<View style={styles.containerStyle}>
<Text style={styles.labelStyle}>{label}</Text>
<TextInput
{...restProps}
onChangeText={onChangeText}
value={value}
placeholder={placeholder}
keyboardType={keyboardType}
/>
{
touched && error && <Text>Enter Value</Text>
}
</View>
)
}
render() {
const { value, email, mobNumber } = this.state;
const { handleSubmit } = this.props;
return (
<View style={styles.container}>
<Field
name='name'
placeholder='Enter your name'
label='Name'
value={value}
onChangeText={value => this.setState({ value })}
component={this.renderFormInput}
/>
<Field
name='email'
placeholder='Enter your email'
label='Email'
value={email}
onChangeText={email => this.setState({ email })}
component={this.renderFormInput}
/>
<Field
name='mobNumber'
placeholder='Enter your phone number'
label='Phone Number'
value={mobNumber}
keyboardType='phone-pad'
onChangeText={email => this.setState({ email })}
component={this.renderFormInput}
/>
<Button title='Submit' onPress={handleSubmit(onSubmit)}>Submit</Button>
</View>
)
}
handleOnChange = value => {
this.setState({
value: value
});
}
}
const styles = {
container: {
marginTop: 10,
flex: 1,
},
inputStyle: {
color: '#000',
paddingRight: 5,
paddingLeft: 5,
fontSize: 18,
lineHeight: 23,
flex: 2,
},
labelStyle: {
fontSize: 15,
color: '#000',
fontWeight: 'bold'
},
containerStyle: {
padding: 10
}
};
export default reduxForm({
form: 'userDetails',
validate: values => {
console.log(values, 'validate function');
const errors= {};
if (!values.name) {
errors.name = 'Please enter name';
}
if (!values.email) {
errors.email = 'Please enter email';
}
return errors;
}
})(UserDetails);
Can anyone help me with this. Thank you.
No responses yet.