Sergey
Вешаешь его на Стейт и коммитишь на сервак
Olexandr
т.е. мне надо чтоб отрабатывало сразу же, а в реальности useState так не работает.
Если использовать setState в классовом исполнении, то можно колбеком его принудительно обновить, а как на хуках я хз
Sergey
Ты раньше использовал уже узестате?
Sergey
Ну тут ведь условие можно поставить
Sergey
Olexandr
конечно
Sergey
Ну тогда я не знаю
Sergey
)
Olexandr
Sergey
конкретнее плз
Ты сам говоришь при определенных условиях нужно а при определенных нет
Sergey
Но входящее условие всегда изменение стейта
Olexandr
т.е. меняют этот стейт
Olexandr
Если я буду пушить из useEffect при глубине связей [productValue], то будет дичь
Olexandr
const submitHandler - отрабатывает при нажатии на сабмит
Sergey
Может тогда редакс все таки?
Olexandr
Может тогда редакс все таки?
Вся админка без редакса работает, куча компонентов, а тут редакс прикручивать ради одного нюанса, как-то не по пацански )
Sergey
)
Sergey
Ну да. Тогда кэлбэки остаются
Olexandr
ну вот читал что useCallback либо useRef как-то можно прикрутить, но я понимаю их изначальную суть, а как их в качестве костыля запихнуть - хз
Olexandr
банально, как одно изменение useState - сделать перманентно, без перерендера. Изначальный вопрос )
Sergey
Узекалбек по сути кэширует функцию а не стате
Sergey
Работает точно также как и узеэфект
Sergey
Я тоже тут не силен
Daniil
Sergey
Мне кажется тебе надо упростить твой пример
Sergey
Минимизировать чтоли
Sergey
И попробовать поиграться с ним
Daniil
и в песочницу! )
Daniil
Daniil
Olexandr
Sergey
Daniil
эмуляция редакса
Daniil
смотри если ты записываешь данные
Daniil
то ты их уже имеешь
Daniil
можешь отправить а потом записать в стейт если это не вредит логике
Daniil
в идеале хонечно лучше по изменению стейта, в классовых компонентах хоть колбэк был
Daniil
там почти одно лицо только в пределах компонента не глобально
Daniil
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
Daniil
Olexandr
внутри функции submit, по нажатию на кнопку мне нужно записать картинку в нужное мне поле стейта и тут же отправить этот стейт на бек
Olexandr
Тут еще есть одна запись, которая получает ссылки в await промис, где внутри then - записываются в стейт, причем стейст сразу же актуальный, т.е. консоль лог тут же выдает нужный мне результат
Daniil
вот тут не понял сабмит у тебя работает после получения картинок из дочернего?
Olexandr
А вот (deletedImgUrls.length !== 0) {
setProductValue({...productValue, imageUrls: remainingImgUrls});
}
Olexandr
Daniil
так
Olexandr
Родитель их принимает и записывает в свои стейты
Daniil
а сабмит когда*