SlideShare a Scribd company logo
Angular - Reactive Forms
vs
React - Redux Form
Mirosław Bogacz
25.10.2018
Start with empty form
www.briisk.co
How to start with empty form
www.briisk.co
<form [formGroup]="form"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
public form: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({});
}
}
contact-form.component.ts
How to start with empty form
www.briisk.co
<form [formGroup]="form"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
public form: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({});
}
}
contact-form.component.ts
How to start with empty form
www.briisk.co
<form [formGroup]="form"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
public form: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({});
}
}
contact-form.component.ts
How to start with empty form
www.briisk.co
<form [formGroup]="form"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
public form: FormGroup;
constructor(private formBuilder: FormBuilder) {
this.form = this.formBuilder.group({});
}
}
contact-form.component.ts
How to start with empty form
www.briisk.co
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact'
})(ContactForm);
contact-form.component.jsx
How to start with empty form
www.briisk.co
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact'
})(ContactForm);
contact-form.component.jsx
How to start with empty form
www.briisk.co
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact'
})(ContactForm);
contact-form.component.jsx
Handle submitting data
www.briisk.co
How to handle submitting data
www.briisk.co
<form [formGroup]="form" (submit)="handleSubmit()"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
// ...
public handleSubmit() {
console.log(this.form.value);
}
// ...
}
contact-form.component.ts
How to handle submitting data
www.briisk.co
<form [formGroup]="form" (submit)="handleSubmit()"></form>
contact-form.component.html
// ...
export class ContactFormComponent {
// ...
public handleSubmit() {
console.log(this.form.value);
}
// ...
}
contact-form.component.ts
How to handle submitting data
www.briisk.co
function submit(values, props) {
console.log(values, props);
}
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact',
onSubmit: submit
})(ContactForm);
contact-form.component.jsx
How to handle submitting data
www.briisk.co
function submit(values, props) {
console.log(values, props);
}
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact',
onSubmit: submit
})(ContactForm);
contact-form.component.jsx
How to handle submitting data
www.briisk.co
function submit(values, props) {
console.log(values, props);
}
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact',
onSubmit: submit
})(ContactForm);
contact-form.component.jsx
How to handle submitting data
www.briisk.co
function submit(values, props) {
console.log(values, props);
}
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit} />
}
export const ContactFormComponent = reduxForm({
name: 'contact',
onSubmit: submit
})(ContactForm);
contact-form.component.jsx
Flat structure
www.briisk.co
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<input formControlName="name" />
<select [formControl]="form.get('colors')">
<option value="#ff0000">Red</option>
</select>
contact-form.component.html
this.form = this.formBuilder.group({
name: [''],
colors: ['']
});
contact-form.component.ts
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
How to use basic structure
www.briisk.co
<Field name="name" component="input" type="text" />
<Field name="colors" component="select">
<option value="#ff0000">Red</option>
</Field>
contact-form.component.jsx
Structure of array
www.briisk.co
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
<div formArrayName="questions">
<div *ngFor="let item of form.get('questions').controls; let i = index;">
<input [formControlName]="i" />
</div>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
questions: this.formBuilder.array([
new FormControl(''),
])
});
contact-form.component.ts
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
How to use structure of array
www.briisk.co
const QuestionsComponent = ({ fields }) => (
{fields.map((field, index) => (
<Field key={field + index} name={field} component="input" type="text" />
))}
);
const ContactForm = ({ handleSubmit }) => {
<form onSubmit={handleSubmit}>
<FieldArray name="questions" component={QuestionsComponent} />
</form>
}
contact-form.component.jsx
Structure of object
www.briisk.co
How to use structure of object
www.briisk.co
<div formGroupName="question">
<input formControlName="title" />
<textarea formControlName="description"></textarea>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
question: this.formBuilder.group({
title: [''],
description: [''],
})
});
contact-form.component.ts
How to use structure of object
www.briisk.co
<div formGroupName="question">
<input formControlName="title" />
<textarea formControlName="description"></textarea>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
question: this.formBuilder.group({
title: [''],
description: [''],
})
});
contact-form.component.ts
How to use structure of object
www.briisk.co
<div formGroupName="question">
<input formControlName="title" />
<textarea formControlName="description"></textarea>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
question: this.formBuilder.group({
title: [''],
description: [''],
})
});
contact-form.component.ts
How to use structure of object
www.briisk.co
<div formGroupName="question">
<input formControlName="title" />
<textarea formControlName="description"></textarea>
</div>
contact-form.component.html
this.form = this.formBuilder.group({
question: this.formBuilder.group({
title: [''],
description: [''],
})
});
contact-form.component.ts
How to use structure of object
www.briisk.co
<FieldSection name="question">
<Field name="title" component="input" type="text" />
<Field name="description" component="textarea" />
</FieldSection>
contact-form.component.jsx
How to use structure of object
www.briisk.co
<FieldSection name="question">
<Field name="title" component="input" type="text" />
<Field name="description" component="textarea" />
</FieldSection>
contact-form.component.jsx
How to use structure of object
www.briisk.co
<FieldSection name="question">
<Field name="title" component="input" type="text" />
<Field name="description" component="textarea" />
</FieldSection>
contact-form.component.jsx
Validation
www.briisk.co
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.ts
this.form = this.formBuilder.group({
name: ['', [ Validators.required, Validators.maxLength(5) ]]
});
function customValidation(control: AbstractControl) {
return !control.value ? { required: 'field is required' } : null;
}
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
How to use validation
www.briisk.co
contact-form.component.jsx
function formValidation(values, props) {
const errors = {};
if (!values.name) {
errors.name = 'name is required'
}
return errors;
}
export const ContactFormComponent = reduxForm({
name: 'contact',
validation: formValidation,
})(ContactForm);
Display error messages
www.briisk.co
How to display validation message
www.briisk.co
contact-form.component.html
<input formControlName="name" />
<div class="error" *ngIf="form.get('name').hasError('required')">
{{ form.get('name').getError('required') }}
</div>
How to display validation message
www.briisk.co
contact-form.component.html
<input formControlName="name" />
<div class="error" *ngIf="form.get('name').hasError('required')">
{{ form.get('name').getError('required') }}
</div>
How to display validation message
www.briisk.co
contact-form.component.html
<input formControlName="name" />
<div class="error" *ngIf="form.get('name').hasError('required')">
{{ form.get('name').getError('required') }}
</div>
How to display validation message
www.briisk.co
contact-form.component.html
<input formControlName="name" />
<div class="error" *ngIf="form.get('name').hasError('required')">
{{ form.get('name').getError('required') }}
</div>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
How to display validation message
www.briisk.co
contact-form.component.jsx
const Input = ({ input, type, meta: { error } }) => (
<React.Fragment>
<input {...input} type={type} />
{error && <div className="error">{error}</div>}
</React.Fragment>
);
<Field
type="text"
component={Input}
/>
www.briisk.co
Hope you enjoyed it!
MIROSŁAW BOGACZ
Miroslaw.bogacz@briisk.co
GitHub: miroslaw-bogacz
www.briisk.co

More Related Content

PPTX
04. session 04 working withformsandframes
PPTX
Forms in html5
PDF
Web I - 04 - Forms
PDF
Fiverr html5 test answers 2020
DOCX
Chat php
PPTX
HTML5 Web Forms
PPTX
Bad Form @ Form, Function & Class 2016
PPTX
Form Validation in JavaScript
04. session 04 working withformsandframes
Forms in html5
Web I - 04 - Forms
Fiverr html5 test answers 2020
Chat php
HTML5 Web Forms
Bad Form @ Form, Function & Class 2016
Form Validation in JavaScript

What's hot (7)

DOCX
Html5 forms input types
PDF
2 create a simple form in chrono forms
PDF
4 building a joomla registration form using chrono forms
PPTX
Form Validation
PDF
Wicket from Designer to Developer
DOC
Why study java script
PPT
Lecture n
Html5 forms input types
2 create a simple form in chrono forms
4 building a joomla registration form using chrono forms
Form Validation
Wicket from Designer to Developer
Why study java script
Lecture n
Ad

Similar to Angular Reactive Forms vs React Redux Form (11)

PDF
Lets make a better react form
PDF
User Forms & API integration
PDF
Beginner’s tutorial (part 1) integrate redux form in react native application
PDF
Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...
PPTX
Angular 6 Form Validation with Material
PDF
Introduction for Master Class "Amazing Reactive Forms"
PDF
React.js Form Management with Formik and Yup in UAE Projects
PPT
Formik vs React-Hook-form
PPTX
Angular Basics: A Beginner's Guide to Web Development
PPTX
Generic forms
PDF
Angular genericforms2
Lets make a better react form
User Forms & API integration
Beginner’s tutorial (part 1) integrate redux form in react native application
Redux Form | ReactJS Tutorial for Beginners | React Redux Tutorial | ReactJS ...
Angular 6 Form Validation with Material
Introduction for Master Class "Amazing Reactive Forms"
React.js Form Management with Formik and Yup in UAE Projects
Formik vs React-Hook-form
Angular Basics: A Beginner's Guide to Web Development
Generic forms
Angular genericforms2
Ad

Recently uploaded (20)

PDF
Softaken Excel to vCard Converter Software.pdf
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPT
JAVA ppt tutorial basics to learn java programming
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
medical staffing services at VALiNTRY
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
System and Network Administraation Chapter 3
PDF
top salesforce developer skills in 2025.pdf
PPTX
history of c programming in notes for students .pptx
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
Essential Infomation Tech presentation.pptx
Softaken Excel to vCard Converter Software.pdf
VVF-Customer-Presentation2025-Ver1.9.pptx
JAVA ppt tutorial basics to learn java programming
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
How to Choose the Right IT Partner for Your Business in Malaysia
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
2025 Textile ERP Trends: SAP, Odoo & Oracle
Which alternative to Crystal Reports is best for small or large businesses.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
How to Migrate SBCGlobal Email to Yahoo Easily
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
medical staffing services at VALiNTRY
How Creative Agencies Leverage Project Management Software.pdf
System and Network Administraation Chapter 3
top salesforce developer skills in 2025.pdf
history of c programming in notes for students .pptx
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Essential Infomation Tech presentation.pptx

Angular Reactive Forms vs React Redux Form

  • 1. Angular - Reactive Forms vs React - Redux Form Mirosław Bogacz 25.10.2018
  • 2. Start with empty form www.briisk.co
  • 3. How to start with empty form www.briisk.co <form [formGroup]="form"></form> contact-form.component.html // ... export class ContactFormComponent { public form: FormGroup; constructor(private formBuilder: FormBuilder) { this.form = this.formBuilder.group({}); } } contact-form.component.ts
  • 4. How to start with empty form www.briisk.co <form [formGroup]="form"></form> contact-form.component.html // ... export class ContactFormComponent { public form: FormGroup; constructor(private formBuilder: FormBuilder) { this.form = this.formBuilder.group({}); } } contact-form.component.ts
  • 5. How to start with empty form www.briisk.co <form [formGroup]="form"></form> contact-form.component.html // ... export class ContactFormComponent { public form: FormGroup; constructor(private formBuilder: FormBuilder) { this.form = this.formBuilder.group({}); } } contact-form.component.ts
  • 6. How to start with empty form www.briisk.co <form [formGroup]="form"></form> contact-form.component.html // ... export class ContactFormComponent { public form: FormGroup; constructor(private formBuilder: FormBuilder) { this.form = this.formBuilder.group({}); } } contact-form.component.ts
  • 7. How to start with empty form www.briisk.co const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact' })(ContactForm); contact-form.component.jsx
  • 8. How to start with empty form www.briisk.co const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact' })(ContactForm); contact-form.component.jsx
  • 9. How to start with empty form www.briisk.co const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact' })(ContactForm); contact-form.component.jsx
  • 11. How to handle submitting data www.briisk.co <form [formGroup]="form" (submit)="handleSubmit()"></form> contact-form.component.html // ... export class ContactFormComponent { // ... public handleSubmit() { console.log(this.form.value); } // ... } contact-form.component.ts
  • 12. How to handle submitting data www.briisk.co <form [formGroup]="form" (submit)="handleSubmit()"></form> contact-form.component.html // ... export class ContactFormComponent { // ... public handleSubmit() { console.log(this.form.value); } // ... } contact-form.component.ts
  • 13. How to handle submitting data www.briisk.co function submit(values, props) { console.log(values, props); } const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact', onSubmit: submit })(ContactForm); contact-form.component.jsx
  • 14. How to handle submitting data www.briisk.co function submit(values, props) { console.log(values, props); } const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact', onSubmit: submit })(ContactForm); contact-form.component.jsx
  • 15. How to handle submitting data www.briisk.co function submit(values, props) { console.log(values, props); } const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact', onSubmit: submit })(ContactForm); contact-form.component.jsx
  • 16. How to handle submitting data www.briisk.co function submit(values, props) { console.log(values, props); } const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit} /> } export const ContactFormComponent = reduxForm({ name: 'contact', onSubmit: submit })(ContactForm); contact-form.component.jsx
  • 18. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 19. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 20. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 21. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 22. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 23. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 24. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 25. How to use basic structure www.briisk.co <input formControlName="name" /> <select [formControl]="form.get('colors')"> <option value="#ff0000">Red</option> </select> contact-form.component.html this.form = this.formBuilder.group({ name: [''], colors: [''] }); contact-form.component.ts
  • 26. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 27. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 28. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 29. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 30. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 31. How to use basic structure www.briisk.co <Field name="name" component="input" type="text" /> <Field name="colors" component="select"> <option value="#ff0000">Red</option> </Field> contact-form.component.jsx
  • 33. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 34. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 35. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 36. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 37. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 38. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 39. How to use structure of array www.briisk.co <div formArrayName="questions"> <div *ngFor="let item of form.get('questions').controls; let i = index;"> <input [formControlName]="i" /> </div> </div> contact-form.component.html this.form = this.formBuilder.group({ questions: this.formBuilder.array([ new FormControl(''), ]) }); contact-form.component.ts
  • 40. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 41. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 42. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 43. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 44. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 45. How to use structure of array www.briisk.co const QuestionsComponent = ({ fields }) => ( {fields.map((field, index) => ( <Field key={field + index} name={field} component="input" type="text" /> ))} ); const ContactForm = ({ handleSubmit }) => { <form onSubmit={handleSubmit}> <FieldArray name="questions" component={QuestionsComponent} /> </form> } contact-form.component.jsx
  • 47. How to use structure of object www.briisk.co <div formGroupName="question"> <input formControlName="title" /> <textarea formControlName="description"></textarea> </div> contact-form.component.html this.form = this.formBuilder.group({ question: this.formBuilder.group({ title: [''], description: [''], }) }); contact-form.component.ts
  • 48. How to use structure of object www.briisk.co <div formGroupName="question"> <input formControlName="title" /> <textarea formControlName="description"></textarea> </div> contact-form.component.html this.form = this.formBuilder.group({ question: this.formBuilder.group({ title: [''], description: [''], }) }); contact-form.component.ts
  • 49. How to use structure of object www.briisk.co <div formGroupName="question"> <input formControlName="title" /> <textarea formControlName="description"></textarea> </div> contact-form.component.html this.form = this.formBuilder.group({ question: this.formBuilder.group({ title: [''], description: [''], }) }); contact-form.component.ts
  • 50. How to use structure of object www.briisk.co <div formGroupName="question"> <input formControlName="title" /> <textarea formControlName="description"></textarea> </div> contact-form.component.html this.form = this.formBuilder.group({ question: this.formBuilder.group({ title: [''], description: [''], }) }); contact-form.component.ts
  • 51. How to use structure of object www.briisk.co <FieldSection name="question"> <Field name="title" component="input" type="text" /> <Field name="description" component="textarea" /> </FieldSection> contact-form.component.jsx
  • 52. How to use structure of object www.briisk.co <FieldSection name="question"> <Field name="title" component="input" type="text" /> <Field name="description" component="textarea" /> </FieldSection> contact-form.component.jsx
  • 53. How to use structure of object www.briisk.co <FieldSection name="question"> <Field name="title" component="input" type="text" /> <Field name="description" component="textarea" /> </FieldSection> contact-form.component.jsx
  • 55. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 56. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 57. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 58. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 59. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 60. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 61. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 62. How to use validation www.briisk.co contact-form.component.ts this.form = this.formBuilder.group({ name: ['', [ Validators.required, Validators.maxLength(5) ]] }); function customValidation(control: AbstractControl) { return !control.value ? { required: 'field is required' } : null; }
  • 63. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 64. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 65. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 66. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 67. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 68. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 69. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 70. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 71. How to use validation www.briisk.co contact-form.component.jsx function formValidation(values, props) { const errors = {}; if (!values.name) { errors.name = 'name is required' } return errors; } export const ContactFormComponent = reduxForm({ name: 'contact', validation: formValidation, })(ContactForm);
  • 73. How to display validation message www.briisk.co contact-form.component.html <input formControlName="name" /> <div class="error" *ngIf="form.get('name').hasError('required')"> {{ form.get('name').getError('required') }} </div>
  • 74. How to display validation message www.briisk.co contact-form.component.html <input formControlName="name" /> <div class="error" *ngIf="form.get('name').hasError('required')"> {{ form.get('name').getError('required') }} </div>
  • 75. How to display validation message www.briisk.co contact-form.component.html <input formControlName="name" /> <div class="error" *ngIf="form.get('name').hasError('required')"> {{ form.get('name').getError('required') }} </div>
  • 76. How to display validation message www.briisk.co contact-form.component.html <input formControlName="name" /> <div class="error" *ngIf="form.get('name').hasError('required')"> {{ form.get('name').getError('required') }} </div>
  • 77. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 78. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 79. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 80. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 81. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 82. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 83. How to display validation message www.briisk.co contact-form.component.jsx const Input = ({ input, type, meta: { error } }) => ( <React.Fragment> <input {...input} type={type} /> {error && <div className="error">{error}</div>} </React.Fragment> ); <Field type="text" component={Input} />
  • 84. www.briisk.co Hope you enjoyed it! MIROSŁAW BOGACZ [email protected] GitHub: miroslaw-bogacz www.briisk.co