С Новым годом! Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Luca Brasi
892 / 204 / 55
Регистрация: 06.11.2015
Сообщений: 2,288
Записей в блоге: 2

Отслеживание изменений в форме

28.05.2024, 12:43. Показов 1159. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени!
Есть форма, на которой 30 инпутов разного рода. Стоит задача о контоле изменений в каждом поле. Т.е. изменили возраст - подсветилась кнопка, на оснвании какого то состояния.

На текущий момент идет реализация через дополнительніе переменные, когда было 10 полей - это еще можо было стерпеть, но сейчас уже тяжковато всё это отслеживать.
Есть ли какие то готовые решения, чтоб поменьше велосипеда изобретать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2024, 12:43
Ответы с готовыми решениями:

Отслеживание изменений
Кто-нибудь знает как отслеживать изменения модели $scope.applyingParameters = { checkbox: '', chooseView:...

Задача. Работа с файлами. Отслеживание изменений файлов в папке и откат изменений
Задача: Дана папка, которая является хранилищем файлов. Для всех текстовых файлов (*.txt), находящихся в этой папке, или вложенных...

Отслеживание изменений
Здравствуйте, подскажите пожалуйста, как в Access можно отследить изменения и пользователя который эти изменения сделал. В Excel есть такая...

6
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,146
Записей в блоге: 14
28.05.2024, 13:43
У меня есть опыт создания форм с большим количеством полей с помощью Formik + адаптация генератора форм из этой статьи под свои требования

В итоге можем писать такой код - поля формы описываются как схема

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { useState } from 'react'
import { AdvancedForm } from './components/forms/AdvancedForm'
 
 
  const formSchema = [
    { name: 'name', label: 'Name', componentType: 'text', required: true },
    { name: 'playable', label: 'Playable', componentType: 'checkbox' },
    {
      name: 'race',
      label: 'Race',
      componentType: 'radioGroup',
      options: [
        { label: 'Human', value: 'human' },
        { label: 'Dwarf', value: 'dwarf' },
        { label: 'Elf', value: 'elf' },
      ],
    },
    {
      name: 'class',
      label: 'Class',
      componentType: 'select',
      options: [
        { label: 'Ranger', value: 'ranger' },
        { label: 'Wizard', value: 'wizard' },
        { label: 'Healer', value: 'healer' },
      ],
    },
    {
      name: 'spell',
      label: 'Spell',
      componentType: 'select',
      options: [
        { label: 'Fire', value: 'fire' },
        { label: 'Ice', value: 'ice' },
      ],
      condition: { key: 'class', value: 'wizard', operator: '=' },
    },
    {
      name: 'description',
      label: 'Description',
      componentType: 'textarea',
    },
  ]
 
 
export default function App() {
  const [formValues, setFormValues] = useState([])
 
  const handleSubmit = async (values, { setSubmitting }) => {
    setSubmitting(true)
    setFormValues(values)
    await new Promise((r) => setTimeout(r, 1000))
    setSubmitting(false)
  }
 
  return (
    <>
      <h1>Advanced Form</h1>
 
      <div className="flex">
        <div className="form section">
          <AdvancedForm schema={formSchema} onSubmit={handleSubmit} />
        </div>
        <div className="results section">
          <pre>{JSON.stringify(formValues, null, 2)}</pre>
        </div>
      </div>
    </>
  )
}
Есть еще react-hook-form, но я его почти не пробовал
1
 Аватар для Luca Brasi
892 / 204 / 55
Регистрация: 06.11.2015
Сообщений: 2,288
Записей в блоге: 2
28.05.2024, 13:52  [ТС]
mr_dramm, Formik уже не поддерживается насколько я помню. Тут кстати у меня и есть React hook form.
Кстати там есть такая штука как isDirty, как я случайно нашёл:
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3812 / 1650 / 428
Регистрация: 14.03.2022
Сообщений: 4,120
28.05.2024, 14:03
Цитата Сообщение от Luca Brasi Посмотреть сообщение
Есть ли какие то готовые решения, чтоб поменьше велосипеда изобретать?
Например react-hook-form... https://react-hook-form.com



Смотри в сторону watch...
С его помощью можно "отслеживать" изменения полей.
0
250 / 184 / 58
Регистрация: 12.03.2021
Сообщений: 1,043
28.05.2024, 16:34
Цитата Сообщение от Luca Brasi Посмотреть сообщение
изменили возраст - подсветилась кнопка, на оснвании какого то состояния.
может, стоит лучше сформулировать, прежде чем пихать в проект всякое стороннее?
какая кнопка подсветилась? в данном случае я вижу только одну кнопку. изменилось значение - подсветилась, нажали - перестала светиться? тут аж целое (ого!) одно состояние и не важно, сколько там у тебя инпутов.
зависит от того, как прописана страница, как изменяются стейты. если это всё один компонент, продублированный 30 раз - нет проблем. если у тебя все эти параметры хранятся условно в одном массиве - тоже нет проблем. в чем конкретно сложность, что не так с увеличением количества полей?
0
 Аватар для Luca Brasi
892 / 204 / 55
Регистрация: 06.11.2015
Сообщений: 2,288
Записей в блоге: 2
29.05.2024, 20:11  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
С его помощью можно "отслеживать" изменения полей.
кажеться видел этот видос, надо будет пересмотреть
Цитата Сообщение от Splaisto Посмотреть сообщение
тут аж целое (ого!) одно состояние и не важно, сколько там у тебя инпутов.
выглядит это примерно так:

Есть некоторый набор полей, в состоянии 1 которыми они инициализированы. В состоянии 2 поменяли возраст и стало возможным сохранение по нажатию на кнопку. Но если мы вернём всё как было, в состоянии 3, то и кнопка перестанет быть активной, потому что по факту, мы ничего не изменили.
Ключевым моментом в этом всём есть то, что форма должна уметь сравнивать изменённые значения со значениями инициализации. А не то что "значение поменял, и форма навсегда упала в изменённое состояние".
0
250 / 184 / 58
Регистрация: 12.03.2021
Сообщений: 1,043
30.05.2024, 09:35
Цитата Сообщение от Luca Brasi Посмотреть сообщение
выглядит это примерно так:
задаём массив в редюссере
JavaScript
1
2
3
4
5
6
7
arr = [
{title: 'name',
value: 'Bob'},
{title: 'age',
value: 18}
...
]
далее этот массив мапим на поля ввода:
JavaScript
1
arr.map(x=><InputComponent title={x.title} value={x.value}/>)
в InputComponent (простите за мой древний классовый, перепишите под хуки по желанию) в state value заносим props.value. пишем следующее:
JavaScript
1
2
3
4
5
6
componentDidUpdate(prevProps, prevState){
 if (this.state.value !== prevState.value){
  let changed = this.state.value === this.props.value ? false : true;
  //функция меняющая флаг изменения инпутов в редюссере
 }
}
на саму кнопку вешаем дизейбл если !changed.
при добавлении новых полей просто пополняем массив объектом {title, value}, проверка на изменения значений происходит везде, профит. ах, да, по нажатию на кнопку, соответственно, переписывать arr.

Добавлено через 1 час 41 минуту
зря лайкнул, это криво отработает) изменив одно поле на новое значение, а второе на новое и потом старое, кнопка будет залочена
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2024, 09:35
Помогаю со студенческими работами здесь

Отслеживание изменений
Добрый день. Уважаемые форумчане, подскажите где подсмотреть. Пытаюсь написать пинговалку. private bool ConnectedStatus(string _ip) ...

Отслеживание изменений
Здравствуйте, учу C#. Сделал таблицу. Когда нажимаю кнопку &quot;Поместить&quot; без введённых данных, то выдаст ошибку, меня бросает на изменение...

отслеживание изменений
вот у каждого разработчика получается есть своя копия репозитория(которую он получает спомощью git clone) так? И если я у себя создам...

Отслеживание изменений
Доброго времени суток есть два справочника Сотрудники и Организация Информация в ТЧ справочника сотрудники должна повторяться в...

отслеживание изменений
И вновь день добрый. как отследить, изменилось ли определенное поле в jsp, непосредственно через Controller ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru