Wpis z mikrobloga

#react #javascript #programista15k #programowanie Piszę aplikacje która pobiera dane z endpointa, odopowiedź pakuje do array a potem w render() mapuję tą tablicę i zwracam dla każdego elementu diva. Teraz pracuję nad funkcją która po kliknięciu w diva będzie robić zapytanie na endpoint kóry musi zawierać id tego elementu. Próbowałem e.target ale jest ciągle undefined, a kiedy przekażę w środku diva na onClicka ten sam parametr co w key{element.id} to wywołuje to loopa i #!$%@? przeglądarkę. Jak wyciągnąć informacje który element został kliknięty do funkcji która będzie pod onClickiem?
  • 27
@cr6d: weź sobie id z closure. Jak robisz map to masz wewnątrz callbacka dostęp do ID. Wystarczy że zrobisz onClick={() => doSomething(id)} gdzie doSomething to twój handler a id to id obecnie mapowanego elementu
@budyn: @Marmite: const downloadList = (id) => {
axios
.get(
https:dvfdfdfc/${todosArray[id].id},
{
headers: {
Authorization: Bearer ${localStorage.getItem("token")},
},
}
)
.then((response) => setListArray(response));
console.log(id);
}; downloadList(aa.id)}
@laki1: tak jak na poczotku pisalem ze z endpointa dostaje dane i pakuje je do tej wlasnie todosArray a potem mapuje w render. TypeError: Cannot read properties of undefined (reading 'id') taki dostaje komunikat jak chce wyslac zapytanie z tego downloadList. tak jestem pewnie ze ma
@laki1: i w tej tablicy potrzbuje sie dostac do elementu o indeksie ktory zostal klikniety i z niego todosArray pod kluczem id jest id ktore musze wsadzic w url czyli todosArray.id jak wpisze np todoArray[0].id to działa
@cr6d: wrzuć kod z dummy_data - albo chociaż podobną strukturą do tej z endpointa.

"Jak wyciągnąć informacje który element został kliknięty do funkcji która będzie pod onClickiem?"

JW. Albo jak div ma być jakimś specyficznym komponentem to możesz z niego zrobić Komponent funkcyjny i zapodać mu propsa jak go będziesz mapować i w propsie przekazać ID. Wew Komponentu zrobić onClick handler który sprawdza czy to kliknięty i odpala twoją wyjściową funkcję
@cr6d: A co jeśli twój todosArray będzie wyglądał tak: [{id: 1}, {id: 10}] ? Klikając na pierwszy element odpytasz api o id 10, a klikając drugi dostaniesz error bo todosArray nie ma 10 elementu.
@laki1: nie ma znaczenia, tam jest kilka jeszcze innych kluczy a ja potrzbuje podstawic po prostu id z tego obiektu i obecnie mam np 623 i 634 i działa jak sie napisze todosArray[0].id
nie ma znaczenia


@cr6d: A jednak ma ¯\_(ツ)_/¯

W downloadList(aa.id) podajesz konkretne id obiektu o które chcesz odpytać api ale zamiast go po prostu użyć do odpytania api bierzesz obiekt o indeksie id z todosArray i bierzesz jego id.

Musiałbyś wrzucić jakiś przykład odpowiedzi z api, później jak mapujesz dane z api do todosArray i jak napisałeś ten render. Bo poza tym co opisałem wyżej wygląda wszystko ok.
@laki1: rozumiem o co ci chodzi, zrobiłem tak teraz, że przekazałem w onClick={downloadList(todo.id)} i w potem w funkcji nie odwolywalem sie juz do todos array tylko po prostu na koncu endpointa id i działa ale sie zapętla i wysyła caly czas żadania ze wszystkich id które sa w tym todosArray
jest takie samo


@cr6d: Może być takie samo. Jak działasz na testowych danych i masz array gdzie id są po kolei to będzie działać. Wystarczy że usuniesz jeden todo z listy i już index w tablicy nie będzie równy id obiektu.

działa ale sie zapętla i wysyła caly czas żadania ze wszystkich id które sa w tym todosArray


@cr6d: Ciężko powiedzieć co jest nie tak, musiałbyś wrzucić więcej kodu
@laki1: [
{
"id": 626,
"name": "sdsd",
"user": {
"id": 213,
"username": "user123",
"email": "user123@o2.pl",
"provider": "local",
"confirmed": true,
"blocked": null,
"role": 1,
"createdat": "2021-09-10T16:18:29.000Z",
"updated
at": "2021-09-10T16:18:29.000Z"
},
"publishedat": "2021-09-13T16:38:23.000Z",
"created
at": "2021-09-13T16:38:23.000Z",
"updatedat": "2021-09-13T16:38:23.000Z",
"task": [
{
"id": 1051,
"name": "sdsd",
"isDone": false
}
]
},
{
"id": 633,
"name": "something",
"user": {
"id": 213,
"username": "user123",
"email": "user123@o2.pl",
"provider": "local",
"confirmed": true,
"blocked": null,
"role":