coś jest nie tak z this - czy to jest do obejścia?

0

Czołem

Zacięłam się na pewnym fragmencie komponentu Reactjs

 constructor(props) {
        super(props);
        this.state = { 
            counter: 0,
            isTeam: 'null',
            tag:'No matter',
            isSortNameAscending: null,
            isSortScoreAscending: null,
           //dyscypliny:this.props.disciplines
           dyscypliny:AddScore(this.props.disciplines)
        };

Powyżej konstruktor. Widzicie linijkę wykomentowaną? Ona działa. Natomiast ta poniżej wywala błąd niezdefiniowanego this.

Reszta kodu jest taka

export const AddScore =(Dyscypliny)=>{
   for(let d of Dyscypliny) {
    d.score= disciplineScore(this.props.athlete.skillset,d.requirements)
} return Dyscypliny;}

Powyższy fragment dodaje nową właściwość dla każdego obiektu w tablicy obiektów. To AddScore działa jeżeli jest wywołane w bloku render, wtedy kiedy już mamy wczytany stan (z linijką konstruktora obecnie wykomentowaną. Athlete to inny props przekazywany temu komponentowi.
Natomiast chciałabym to zrobić tak, żeby ten stan zawierał nową właściwość 'od razu' . Da się to jakoś obejść?

0

A niby czym miałoby być to this w kodzie niżej? Na pewno nie instancją klasy do której należy konstruktor z kodu wyżej. Pewnie wpisałeś to tam po to żeby dostać props, ale przecież w Twoja funkcjia z drugiego kodu nie jest w tej klasie więc ani this ani this.props tam nie istnieje.

Najlepiej pokaż cały kod.

0

Masz już props przekazane w parametrze - po co chcesz tam robić this.props?

0

Wewnątrz funkcji addScore używasz this, które w żadnym wypadku nie jest instancja Twojego komponentu.

Przekaz athlete.skillset jako drugi parametr.

0
TomRiddle napisał(a):

A niby czym miałoby być to this w kodzie niżej? Na pewno nie instancją klasy do której należy konstruktor z kodu wyżej. Pewnie wpisałeś to tam po to żeby dostać props, ale przecież w Twoja funkcjia z drugiego kodu nie jest w tej klasie więc ani this ani this.props tam nie istnieje.

Nie no, samo this istnieje zawsze (tak samo this.props, ale rozumiem, że to skrót myślowy). Tylko jest ustawione na inną wartość. Ewentualnie – "nie istnieje", jeśli np. wyraźnie przypiszemy mu wartość undefined.

0
Silv napisał(a):

Nie no, samo this istnieje zawsze (tak samo this.props, ale rozumiem, że to skrót myślowy). Tylko jest ustawione na inną wartość. Ewentualnie – "nie istnieje", jeśli np. wyraźnie przypiszemy mu wartość undefined.

Yyyy... nie. Po pierwsze po co miałbyś mu przypisywać undefined? :D Po drugie:

Silv napisał(a):

tak samo this.props

to nie prawda, bo props to jakaś właściwość tej Twojej klasy, do której w drugim kodzie nie masz dostępu. Miałem na myśli, że może i (jak już się uparłeś) this istnieje w obu tych kontekstach, to na pewno nie są to te same thisy. this w klasie z pierwszego kodu wskazuje na inny obiekt, niż this w tej Twojej lambdzie w drugim kodzie.

0

Dzięki
Tak, właściwie z rozpędu przepisałam coś co grało w innym miejscu a w kontruktorze nie gra. Gra natomiast athlete.skillset
Patryk i Desu nie pierwszy raz uratowali mi skórę, podziękowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1