Skip to content

Commit c61b7cb

Browse files
authored
Merge pull request #63 from serenata-keith-mifsud/master
setStateInternal with updater function
2 parents 24e9e0c + 557fa04 commit c61b7cb

File tree

1 file changed

+24
-26
lines changed

1 file changed

+24
-26
lines changed

src/Form.js

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,8 @@ class Form extends Component {
7878
e.preventDefault();
7979
}
8080

81-
const { dirty, errors, fields } = this.state;
82-
8381
this.setStateInternal(
84-
{
82+
({ dirty, errors, fields }) => ({
8583
dirty: Object.keys(dirty).reduce(
8684
(allDirty, field) => ({
8785
...allDirty,
@@ -104,7 +102,7 @@ class Form extends Component {
104102
{},
105103
),
106104
submitted: false,
107-
},
105+
}),
108106
this.props.onReset,
109107
);
110108
};
@@ -120,34 +118,34 @@ class Form extends Component {
120118
};
121119

122120
setError = diff => {
123-
this.setStateInternal({
121+
this.setStateInternal(({ errors }) => ({
124122
errors: {
125-
...this.state.errors,
123+
...errors,
126124
...diff,
127125
},
128-
});
126+
}));
129127
};
130128

131129
setField = diff => {
132-
const { config, dirty, fields } = this.state;
133-
const allFields = { ...fields, ...diff };
134-
const areDirty = {
135-
...dirty,
136-
...Object.keys(diff).reduce(
137-
(allDirty, field) => ({
138-
...allDirty,
139-
[field]:
140-
dirty[field] ||
141-
diff[field] !== this.initialValues[field],
142-
}),
143-
{},
144-
),
145-
};
146-
147-
this.setStateInternal({
148-
dirty: areDirty,
149-
errors: this.validate(config, allFields, areDirty),
150-
fields: allFields,
130+
this.setStateInternal(({ config, dirty, fields }) => {
131+
const allFields = { ...fields, ...diff };
132+
const areDirty = {
133+
...dirty,
134+
...Object.keys(diff).reduce(
135+
(allDirty, field) => ({
136+
...allDirty,
137+
[field]:
138+
dirty[field] ||
139+
diff[field] !== this.initialValues[field],
140+
}),
141+
{},
142+
),
143+
};
144+
return {
145+
dirty: areDirty,
146+
errors: this.validate(config, allFields, areDirty),
147+
fields: allFields,
148+
};
151149
});
152150
};
153151

0 commit comments

Comments
 (0)