React Formik сравнивает значения и исходные значения

avatar
user16071339
1 июля 2021 в 17:58
271
1
0

Я искал и не знаю, где искать. Как вы сравниваете исходные значения и ваши значения в formik и, когда есть разница, получаете имя этого значения, где разница.

Прошел по этой ссылке, но безуспешно https://github.com/formium/formik/issues/215

если есть новое значение имени пользователя при его обновлении, я хочу знать, что имя пользователя обновлено.

<Formik
            innerRef={formRef}
            enableReinitialize={true}
            initialValues={{
                //General
                id: currentUserData.id || '',
                username: currentUserData.username || '',
                name: currentUserData.name || '',
                surname: currentUserData.surname || '',
                dob: currentUserData.dob || '',
                position: currentUserData.position || '',
                notificationValue: currentUserData.notificationValue || 0,

                email: currentUserData.email || '',
                contactNo: currentUserData.contactNo || '',
                userRolls: currentUserData.userRolls || userRolls  ,
                status: currentUserData.status || 'Active',
                

                
            }}
Источник

Ответы (1)

avatar
Mahadev Bk
5 июля 2021 в 12:49
0

Насколько мне известно, прямого способа добиться этого не существует. Чтобы добиться этого сравнения, вам нужно сначала сохранить начальные значения в локальной переменной или состоянии и использовать, как показано в приведенном ниже коде.

const initalValues = {
  //General
  id: currentUserData.id || "",
  username: currentUserData.username || "",
  name: currentUserData.name || "",
  surname: currentUserData.surname || "",
  dob: currentUserData.dob || "",
  position: currentUserData.position || "",
  notificationValue: currentUserData.notificationValue || 0,

  email: currentUserData.email || "",
  contactNo: currentUserData.contactNo || "",
  userRolls: currentUserData.userRolls || userRolls,
  status: currentUserData.status || "Active",
};


   <Formik
      initialValues={initalValues}
      enableReinitialize={true}
      onSubmit={(values) => {
        const keys = Object.keys(initalValues);

        keys.map((key) => {       
          if (initalValues[key] != values[key]) {
            console.log(key);  // Your field name which is modified       
          }
        });
      }}
    >