axrising
@axrising

Как создать несколько полей Formik через map?

Есть данные в виде объекта
type ContactsType = {
  github: string 
  vk: string 
  facebook: string 
  instagram: string 
  twitter: string 
  website: string
  youtube: string 
  mainLink: string 
}
, которые приходят с сервера. Я сделал перебор ключей объекта через map и создал всего одну форму, чтобы динамически подставлять ключи объекта, но я не понимаю как это можно сделать, ибо в name нужна строка, а в value нужен точный путь к объекту и ключу в initialState в формике, долго играюсь с этой мелочью, кто знает как это можно решить, отпишите пожалуйста, буду признателен

initialValues={{
          fullName: profile.fullName,
          lookingForAJob: profile.lookingForAJob,
          lookingForAJobDescription: profile.lookingForAJobDescription,
          aboutMe: profile.aboutMe,
          contacts: profile.contacts,
        }}

{Object.keys(profile.contacts).map((key, inx) => {
                  
                  return (
                    <React.Fragment>
                      <TextField
                        key={key}
                        className={classes.gutters}
                        margin='dense'
                        fullWidth
                        variant='outlined'
                        id='standard-basic'
                        // name={`contacts.${key}`}
                        label={key}
                        // value={values.contacts.}
                        onBlur={handleBlur}
                        onChange={handleChange}
                        // error={touched.contacts?.github && Boolean(errors.contacts?.github)}
                        // helperText={touched.contacts?.github && errors.contacts?.github}
                      />
                    </React.Fragment>
                  )
                })}


Пример с рабочей формой отдельного ключа :
<TextField
                  className={classes.gutters}
                  margin='dense'
                  fullWidth
                  variant='outlined'
                  id='standard-basic'
                  name='contacts.facebook'
                  label='facebook'
                  value={values.contacts.facebook}
                  onBlur={handleBlur}
                  onChange={handleChange}
                  error={touched.contacts?.facebook && Boolean(errors.contacts?.facebook)}
                  helperText={touched.contacts?.facebook && errors.contacts?.facebook}
                />
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
vmakhnyuk
@vmakhnyuk
Frontend developer
{Object.keys(profile.contacts).map((key) => {
                  return (
                    <React.Fragment>
                      <TextField
                        key={key}
                        className={classes.gutters}
                        margin='dense'
                        fullWidth
                        variant='outlined'
                        id='standard-basic'
                        name={`contacts.${key}`}
                        label={key}
                        value={`values.contacts.${key}`}
                        onBlur={handleBlur}
                        onChange={handleChange}
                        error={`touched.contacts?.${key}` && Boolean(`errors.contacts?.${key}`)}
                        helperText={`touched.contacts?.${key}` && `errors.contacts?.${key}`}
                      />
                    </React.Fragment>
                  )
})}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы