<TextField
key={key}
className={classes.gutters}
margin='dense'
fullWidth
variant='outlined'
id='standard-basic'
name={`contacts.${key}`}
label={key}
value={`contacts.${key}`}
onBlur={handleBlur}
onChange={handleChange}
error={touched.contacts?.[key] && Boolean(errors.contacts?.[key])}
helperText={touched.contacts?.[key] && errors.contacts?.[key]}
/>
initErrors
должны лежать все коды ошибок(required, min...), ты их рендеришь все сначала в статусе(класс) неактивном, потом, когда пользователь набирает текст, ты проверяешь для каждой initError, что в массивerrors.includes(initError)
. Если нет - меняешь стиль этой ошибки в активный