javascript - react jsx kullanırken if-else koşulu neden çalışmıyor


React kodu yazarken JSX içinde if-else yazmak çalışmıyor.

<div id={if (condition) { 'msg' }}>Hello World!</div>

Ancak üçlü operatör kullanmak işe yarıyor.

<div id={condition ? 'msg' : null}>Hello World!</div>

bu neden oluyor?

Cevap #1

Senin JSX'in

<div id={condition ? 'msg' : null}>Hello World!</div>

kendi başına geçerli bir Javascript değil, aşağıdaki ReactJS çağrısına derlenecektir:

React.createElement(
  'div',                            // Element "tag" name.
  { id: condition ? 'msg' : null }, // Properties object.
  'Hello World!'                    // Element contents.
);

bu, Javascript çalışma zamanı ortamınız tarafından yorumlanmaya/derlenmeye hazır olan geçerli bir Javascript'tir. Gördüğünüz gibi, o ifadeye bir if-else sıkıştırmanın hiçbir yolu yoktur, çünkü geçerli bir Javascript'e derlenemez.

Bunun yerine hemen çağrılan bir fonksiyon ifadesi kullanabilir ve içinden döndürülen değeri iletebilirsiniz:

<div id={(function () {
    if (condition) {
        return "msg";
    } else {
        return null;
    }
})()}>Hello World!</div>

bu, aşağıdaki geçerli Javascript'e derlenecektir:

React.createElement(
    "div",
    {
        id: (function () {
            if (condition) {
                return "msg";
            } else {
                return null;
            }
        })()
    },
    "Hello World!"
);

Cevap #2

if-else ifadeleri JSX içinde çalışmaz. Bunun nedeni JSX'in sadece fonksiyon çağrıları ve nesne oluşturma için sözdizimsel şeker olmasıdır. React Belgeleri