169 похожих чатов

Добрый день Есть некоторые глюки при работе с useSWR: function Component(){

const {data} = useSWR('/api/path',fetcher) //получаем список объектов

useEffect(()=>{
console.log(data) // данные отображаются
},[data])

const handleClick = () => {
/......./
console.log(data) <-- data undefined
/....../
}

return (
<>
<Button onClick={handleClick}>Action</Button>
<ComponentForDisplayData data={data}/>
</>
)
}

Запрос отправился и данные отобразились в компоненте. Но при нажатии на кнопку -> data=undefined... Почему?....

24 ответов

11 просмотров

оберни функцию в useCallback

Какую? Обработки клика?

да и в не забудь data в массиве колбэка указать

const handleClick = useCallback( () => { /......./ console.log(data) <-- data undefined /....../ },[data]) data все равно undefined

тут в чём-то другом проблема. попробуй воспроизвести на codesandbox

Попробуй небольшой хак, пробрось данные в функцию клика на прямую

Странно... В сандбоксе работает...

вот теперь надо смотреть, в чём различие) у меня так же бывает часто, пытаешься воспроизвести и всё работает

На нет все тоже самое. Адрес другой только.... Или react-table что-то с данными делает....

такое ощущение что кешируется как-то коллбэк с первым значением data, а оно - undefined

может Button компонент кеширует?

Button это просто кнопка в onClick котого повешена стрелочная функция. В этой функции идет обращение к data

Вот получается при первом рендере data=undefined. Если переключить страницу на другую и потом вернуться то data уже есть данные

у тебя случайно компонент в memo не обёрнут?

Нет

идеи кончились)

memo только внутри компонета используется

попробуй без него

у тебя реактивность не реактивная 😳

useMemo использован для react-table

Вот что интересно: Я использую react-table Колонки определены так: ``` const columns = useMemo(()=>[ ....... { Header: '', id: 'action', Cell: ({row}) => (<Button color={"primary"} outline className={"ml-1"} onClick={()=>handleClick(row.original.id)}>Action.....</Button>) } ],[]) И у кнопки такое поведение.... Разместил для теста кнопку с имитаций нажатия. Отрабатывает всегда корректно

Ну собственно вот так: const columns = useMemo( ()=>[ ....... { Header: '', id: 'actions', Cell: ({row}) => (......) } ],[data] ) Все работает коректно

Конечно, чем вообще мемоизация должна была помочь

Ререндер не происходит наверное и при инициализации undefined попадает. Хотя там вроде промис. В онлайн редактор залей

Похожие вопросы

Обсуждают сегодня

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
reply = (struct pam_response *)malloc(sizeof(struct pam_response)); reply[0].resp = strdup(password); Это так можно ображаться к структуре за указателем, помимо (*reply)...
Юлиан🦉 Колессиков ⛵️
14
что это и почему оно? executor.start_polling(bot, skip_updates=True, on_startup=on_startup, File "/usr/local/lib/python3.10/dist-packages/aiogram/utils/executor.py", line 4...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
2
#delphi кто-нибудь встречал официальное описание директивы {$ALIGN ON} (подчеркиваю - официальное, а не левый источник)? какой именно режим выравнивания включится? будут ли в...
Viktor Akselrod
14
Другой вопрос. В последней Делфи не могу приложение свое завершить. Хальт не пашет. Пришлось процесс свой искать и завершать. Лет 20 назад хальт работал всегда. Что то поменял...
1C Programmer
7
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
объясните, я прада не понимаю. зачем в перле нужен аниивент? кому он пригодился в действительно нагруженных проектах?
nerv
30
то есть человек, который рассказывал что Native API лучше чем WinAPI потому что меньше тактов тратиться на проверки, теперь рассказывает что все эти лишние оптимизирующие инст...
Aleksandr
12
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
Карта сайта