Sergey
Вешаешь его на Стейт и коммитишь на сервак
Olexandr
т.е. мне надо чтоб отрабатывало сразу же, а в реальности useState так не работает. Если использовать setState в классовом исполнении, то можно колбеком его принудительно обновить, а как на хуках я хз
Sergey
Ты раньше использовал уже узестате?
Olexandr
Вешаешь его на Стейт и коммитишь на сервак
Так проблема в том что этот productValue - меняется много где, например там еще пачка инпутов, и при каждом изменении инпута - пушить на сверак не нужно
Sergey
Ну тут ведь условие можно поставить
Olexandr
конечно
Sergey
Ну тогда я не знаю
Sergey
)
Sergey
конкретнее плз
Ты сам говоришь при определенных условиях нужно а при определенных нет
Sergey
Но входящее условие всегда изменение стейта
Olexandr
Ты сам говоришь при определенных условиях нужно а при определенных нет
Например инпуты делают так: const handleChange = prop => event => { setProductValue({ ...productValue, [prop]: event.target.value }); };
Olexandr
т.е. меняют этот стейт
Olexandr
Если я буду пушить из useEffect при глубине связей [productValue], то будет дичь
Olexandr
const submitHandler - отрабатывает при нажатии на сабмит
Sergey
Может тогда редакс все таки?
Olexandr
Может тогда редакс все таки?
Вся админка без редакса работает, куча компонентов, а тут редакс прикручивать ради одного нюанса, как-то не по пацански )
Sergey
)
Sergey
Ну да. Тогда кэлбэки остаются
Olexandr
ну вот читал что useCallback либо useRef как-то можно прикрутить, но я понимаю их изначальную суть, а как их в качестве костыля запихнуть - хз
Olexandr
банально, как одно изменение useState - сделать перманентно, без перерендера. Изначальный вопрос )
Sergey
Узекалбек по сути кэширует функцию а не стате
Sergey
Работает точно также как и узеэфект
Olexandr
Узекалбек по сути кэширует функцию а не стате
вот да, как и юзМемо, но вроде как их можно костылями прикрутить для такой ситуации, а как я хз
Sergey
Я тоже тут не силен
Sergey
Мне кажется тебе надо упростить твой пример
Sergey
Минимизировать чтоли
Sergey
И попробовать поиграться с ним
Olexandr
а что там за нюанс? может и можно без редакса
мне нужно записать новое состояние в useState и тут же отправить его (уже измененный вариант) на сервер.
Daniil
и в песочницу! )
Olexandr
а еще есть хук useRedux знаешь?
только о его существовании )
Sergey
а еще есть хук useRedux знаешь?
О я нет - а это для чего?
Daniil
эмуляция редакса
Daniil
смотри если ты записываешь данные
Daniil
то ты их уже имеешь
Daniil
можешь отправить а потом записать в стейт если это не вредит логике
Daniil
в идеале хонечно лучше по изменению стейта, в классовых компонентах хоть колбэк был
Sergey
эмуляция редакса
прикольно - надо повникать
Daniil
там почти одно лицо только в пределах компонента не глобально
Olexandr
можешь отправить а потом записать в стейт если это не вредит логике
в логике я должен записать изменение и его же отправить. Например если в одном месте написать setЧто-то-там и сразуже вызвать этот стейт в консоль, то вылетит предыдущее состояние
Olexandr
ты хранишь в стейте один элемент или список?
Один элемент но с множеством полей, мне нужно перезаписать одно поле (массив ссылок на картинки)
Daniil
понял
Olexandr
Этот стейт перезаписывает кучу разных полей - инпутами, поэтому юзЕффект тут не прокатит
Daniil
ну вот а как ты задаешь массив картинок?
Olexandr
if (deletedImgUrls.length !== 0) { setProductValue({...productValue, imageUrls: remainingImgUrls}); }
Olexandr
productValue - стейт, imageUrls - поле, remainingImgUrls - массив который нужно записать
Daniil
state = { productValue :{ imageUrls:remainingImgUrls } }
Daniil
так?
Olexandr
с картинками да
Olexandr
Весь стейт такой:
Daniil
ок
Olexandr
const [productValue, setProductValue] = useState({ name: "", enabled: true, quantity: "", currentPrice: "", categories: "", color: "", sizes: "", productUrl: "/", description: "", imageUrls: [], });
Daniil
хорошо а как ты задаешь remainingImgUrls
Olexandr
Он прилетает из функции-пропса из дочернего элемента
Daniil
из дочернего?
Olexandr
да, и записывается в стейт родительского.
Olexandr
Эти стейты актуальны - консоль лог все правильно пишет
Daniil
значит есть какой-то колбек для дочернего?
Olexandr
Да
Olexandr
const handleImages = (remainingImages, deletedImages, addedImages) => { setRemainingImgUrls(remainingImages); setDeletedImgUrl(deletedImages); setAddedImgFiles(addedImages); };
Olexandr
А вот стейты в родителе: const [remainingImgUrls, setRemainingImgUrls] = useState([]) const [deletedImgUrls, setDeletedImgUrl] = useState([]); const [addedImgFiles, setAddedImgFiles] = useState([]);
Daniil
ну вот т.е. уже на этом этапе setRemainingImgUrls(remainingImages); ты знаешь что у тебя в итоге будет в стейте так?
Olexandr
конечно
Olexandr
Я все эти стейты консоль-ложу, они выдают ожидаемый результат
Daniil
теперь тебе нужно отправить запрос кудато на бэк я так понял?
Olexandr
внутри функции submit, по нажатию на кнопку мне нужно записать картинку в нужное мне поле стейта и тут же отправить этот стейт на бек
Olexandr
Тут еще есть одна запись, которая получает ссылки в await промис, где внутри then - записываются в стейт, причем стейст сразу же актуальный, т.е. консоль лог тут же выдает нужный мне результат
Daniil
вот тут не понял сабмит у тебя работает после получения картинок из дочернего?
Olexandr
А вот (deletedImgUrls.length !== 0) { setProductValue({...productValue, imageUrls: remainingImgUrls}); }
Olexandr
вот тут не понял сабмит у тебя работает после получения картинок из дочернего?
дочерний работает по onChange - сразу же присылает все изменения родителю
Daniil
так
Olexandr
Родитель их принимает и записывает в свои стейты
Daniil
а сабмит когда*