Redux Forms sometimes ends up with register/unregister infinite loop

Don't do this:

validate={[isRequired, maxLength(5)]}

every time the form is rendered maxLength(5) will construct a new function, which will cause field to rerender (because this.props.validate !== nextProps.validate)

You can use specifically defined instances of parameterized validation rules:

const maxLength = max => value =>
    value && value.length > max ? `Must be ${max} characters or less` : undefined;
const maxLength15 = maxLength(15);

<Field
    name="username"
    type="text"
    component={renderField}
    label="Username"
    validate={[required, maxLength15]}
/>