Do czego służy jeden z nawiasów przy takim zapisie funkcji?

0
<input
              type="text"
              id="title"
              value={inputState[0].title}
              onChange={(event) =>
                inputState[1](prevInputState => ({
                  title: event.target.value,
                  amount: prevInputState.amount,
                }))
              }
            />
<input
              type="text"
              id="title"
              value={inputState[0].title}
              onChange={(event) =>
                inputState[1](prevInputState => {
                  title: event.target.value,
                  amount: prevInputState.amount,
                })
              }
            />

Do czego służy ten nawias, który się pojawia po argumencie prevInputState (pierwszy zapis)? W drugim zapisie usunąłem ten nawias.

0

Zdaje sie ze do niczego. Generalnie parser przyjmie dowolna liczbe nadmiarowych nawiasow.

(((((5 + 5))))) // <--- legit
0

@stivens: bez tego nawiasu aplikacja mi się wykrzacza. Pojawia się błąd: Parsing error: Unexpected token, expected ";".

1

Ahhhh bo to chyba jest rozroznienie miedzy blokiem kodu a obiektem javascriptowym (?)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Advanced_syntax

0

@stivens: w tym link w sekcji poświęconej "Advanced syntax" znalazłem takie coś: "To return an object literal expression requires parentheses around expression". Czyli wychodzi na to, że wtedy, gdy zwracany jest obiekt dodatkowo powinno użyć się nawiasów?

0

No wlasnie do tej sekcji linka wyslalem. Tzn. po szybkim edicie bo najpierw do ogolnej odsylalo.

Tak, o to chodzilo.

1

Tak, ponieważ JavaScript nie jest w stanie odróżnić, czy funkcja strzałkowa zwraca obiekt {...} czy chodzi o blok, w którym definiujemy ciało funkcji.

() => {
 return {"2": "3"};
}
() => ({
 "2": "3"
});
1

Tak jak stivens powiedział. W przypadku gdy chcesz skorzystać z arrow function który zwraca bezpośrednio wynik (bez słowa return), a chcesz zwrócić obiekt - musisz go owrapowac w () - w innym wypadku, to co jest między {} jest traktowane jako blok kodu, a nie jako obiekt więc zapis {title: event.target.value} nie miałby najmniejszego sensu.

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