JSX Nedir! Detaylı Anlatım ve Örnekler

May 1, 20207 dakika





Eğer, JSX ile ilk defa karşılaşıyorsanız yazım biçimi biraz enteresan gelebilir. İlk karşılaştığım zaman bende bir süre alışmakta zorluk çektim, zaman geçtikten sonra alışmaya başladığınızda da bu sefer JSX olmadan bir şeyler yapmanız zor oluyor. Konuya başlamadan önce söyleyeceğim JSX' e alışması da bırakması da zordur



JSX, JavaScript ve XML kelimelerinin baş harflerinden elde edilen akronim bir kelimedir. JSX 'in temel kullanım amacı, javascript dosyalarının içinde HTML kodu yazarak daha görsel bir kod kullanımı sağlamaktır. Aynı zamanda declarative biçimde doküman yapısında yer alan elementleri veya bileşenleri göstermemize olanak verir. Bu son cümleyi biraz açmak istiyorum. JSX veya benzer teknolojiler gelmeden önce DOM üzerine bir element oluşturmak, elementlere attribute eklemek veya event listeneleri bağlamak istediğimiz zaman bu işlemleri declarative biçimde değil imperative biçimde yapıyorduk. Özetle, JSX bize js dosyaları içinde declarative html elementleri yazma imkanı verdi. Bu şekilde daha karmaşık olmasına rağmen anlaması daha kolay bileşenler oluşturabiliyoruz. Yukarıdaki söylemiş olduklarım JSX temel amacını ve özelliklerini belirtiyordu. Teknik olarak ise JSX, React API içinde React.createElement(component, props, ...children) fonksiyonunun yazımını kolaylaştıran sentetik bir gösterimdir.

Yukarıda söylemiş olduklarım, JSX 'in ne olduğunu ve neden kullanıldığını öz olarak ifade ediyor. JSX bize temel olarak yukarıdaki kolaylıkları sağlıyor. JSX kullanırken aynı zamanda bir takım koşullar mevcut ve bu koşullarla birlikte JSX ile yapabileceklerimiz veya yapamayacaklarımız var. Elimden geldiğince bu kısımları açıklamaya çalıştım. Ayrıca bu kullanımları ve özellikleri açıklarken hepsine birer örnek verdim. Eğer okumaya devam edecekseniz her örneği tekrarlamanızı ve yazmanızı tavsiye ediyorum. Bu makaleyi okurken bu böyleymiş bu şöyleymiş gibi üstünkörü bir okuma yaparsanız, konunun ne olduğunu anlamış olsanız bile büyük ihtimalle tam öğrenemeyeceksiniz. Lütfen, bir react projesini lokal’de başlatın, (eğer react projesi nasıl başlatılır bilmiyorsanız hesabım üzerinden bu konu ile ilgili bir makale yazmıştım oradan yararlanabilirsiniz.) aşağıda vermiş olduğum örnekleri kendiniz bir miktar değiştirerek yapmaya başlayın. Örnekleri yaparken eğer yeterli zamanınız var ise biraz karmaşıklaştırmaya veya kafanızda tasarlayacağız bir şeylere dönüştürmeye çalışın. En iyi programcı kod yazmaya başlayandır. Makaleyi pratik yaparak okursanız hem derinlemesine öğrenmiş, hemde JSX 'i projelerinizde daha kullanılabilir hale getirmiş olursunuz.

JSX ve React.createElement() Fonksiyonun Karşılaştırması

İlk olarak JSX'in bize bileşenleri veya elementleri oluştururken nasıl bir kolaylık ve soyutlama sağladığını göstermek istiyorum. Bunun için aşağıdaki örneği hem JSX hemde createElement() fonksiyonu kullanarak örnekledim. Aşağıdaki örnekte de görüldüğü üzere, JSX ile yazılmış olan koda baktığımız zaman tarayıcıda ne göreceğimiz tam olarak anlayabiliyoruz. createElement() fonksiyonu ile bu yapıyı tam göremiyoruz, eğer elementler çok fazla dallanmaya başladığı zaman createElement() fonksiyonu ile oluşturulmuş olan yapıyı anlamak ve çözümlemek JSX'e göre daha zor olmaya başlıyor.









JSX ’in Özellikleri

Geçerli ve Geçersiz JSX Elementleri

JSX, açık <Tag /> veya <Tag>Metin</Tag> şeklinde gösterilir. Burada dikkat edilmesi gereken hususlardan biride <> gösteriminin içinde yazılacak olan elementin büyük veya küçük harfi ile yazımıdır. Eğer <> gösteriminin içinde küçük harfle başlanıyorsa, örneğin <span> </span>, <textarea /> <img /> bu elementler DOM elementleri temsil eder. Eğer JSX içinde bir React bileşeni göstermek istiyorsak, bileşenin mutlaka büyük harfle başlaması gerekiyor. Eğer <> gösteriminin içinde büyük harf ile başlamıyorsa JSX bunu bir React bileşeni olarak değil , DOM elementi olarak algılar eğer bu element uygun bir DOM elementi değil ise hata verir. Örnek;



JSX İçinde JS Expression Kullanımı

JSX, aslında bir javascript objesinin gösterimidir, yukarıda da zaten createElement() fonksiyonun sentetik gösterimi olduğunu ifade etmiştik. JSX elementlerinin içinde rahatlıkla js değişkenlerini ve expressionlarını kullanabiliriz. Bu kullanım bize HTML elementlerinin içinde dinamik olarak hesaplamış olduğumuz değerleri ve koşullu sonuçları göstermemizi sağlar.

Yukarıdaki örnekte, JSX koduna default olarak verdiğimiz adı, soyadı ve ili istersek önce bir nesnenin içinde tutup daha sonra bunu JSX içinde gösterebiliriz. Bu işlemi yapabilmek için gerekli olan tek koşul tag’lar içine yazılacak değerlerin çengelli parantez({} -> Çengelli Parantez) içinde kullanılmasıdır. Örnek;

JSX İçinde Fonksiyon Kullanımı

JSX içinde bir nesnenin değerini gösterebileceğimiz gibi aynı zamanda herhangi bir fonksiyonu da rahatlıkla çağırabiliriz. Örnek;

JSX İçinde Mantıksal Operator Kullanımı

JSX elementlerinin içinde mantıksal operasyonlarda yapılabilir. Örnek;



JSX ’in ile Prop Kullanımı

JSX elementlerini oluşturan yapı, ister React elementi veya bileşeni olsun isterse DOM elementi olsun, kendi özelliklerini değiştirmek için bir takım proplar alır(Prop’ları Türkçe olarak ifade etmek istemiyorum, makalenin devamında da aynı şekilde kullanacağım). Prop’lar, JSX elementleri içinde aynı DOM elementlerinde içinde attributelerin yaptıkları görevi yaparlar. Mantıksal açıdan herhangi bir farklılık mevcut değil. Örnek;

Prop ile String Literal Kullanımı

İstersek JSX’e String Literal ile değer geçebiliriz. Örnek;

Prop ile Expression Kullanımı

JSX, prop olarak object, string vs. değerler alabileceği gibi aynı zamanda JS Expressionlarını da alabilir. Örneğin, prop olarak bir sayının toplamını veya matematiksel bir işlemi prop olarak JSX’e geçebiliriz.

Prop ile Default Kullanım

JSX verilen prop’un eğer değeri yoksa bu prop JSX tarafından true olarak değerlendirilir . Örnek kullanımı ve sonucu aşağıdaki gibi. Ayrıca burada göstermek istediğim bir husus daha var. Eğer JSX içindeki değer null, false, true, undefined ise bu değerleri DOM üzerinde göstermek için mutlaka String() kurucu fonksiyonu ile birlikte kullanmamız gerekiyor. Aksi halde JSX bu değerleri DOM üzerinde göstermez.



JSX ile Spread Operator Kullanımı

Spread Operator({...object}) kullanımı bazı durumlarda gerçekten kullanışlıdır. Eğer JSX’e vereceğeniz prop’lar bir nesneyse, bu prop’ları JSX’e geçirmek için spread operator’ü kullanabilirsiniz. Aşağıdaki, bileşene vermiş olduğum nesnenin adının props olması zorunlu değil bunun yerine herhangi bir isimde olabilir. Vereceğiniz nesnenin adı ne olursa olsun sonuç değişmez.



JSX ’de Children Kullanımı

Yukarıda verdiğimiz çoğu element veya bileşen ile aslında children kullanımını örneklemiş olduk. Ancak tekrar bu konuya değinmekte yarar var. JSX elementlerinin iki tag arasına yazılacak olan elementlerin hepsi JSX için children olarak tanımlanabilir. Bu özellik, DOM üzerindeki karışık ağaç yapılarını oluşturmamıza olanak sağlar. Örnek;



JSX ’de Expressionların Children Olarak Kullanımı

Yukarıda children kullanımını göstermiştik. JSX’de children’lar render edilirken aynı zamanda bu childrenler bir javascript expression olabilir. Misal, React’ı öğrenmek için gerekli olan konuları bir dizine alabilir daha sonra bir bileşen içinde bu konuları children olarak DOM’a geçebilirsiniz. Örnek;





Fonksiyonu Children Olarak Geçme

JSX, elementlerini yukarıdaki gördüğümüz gibi children olarak geçebiliyoruz. Sonuç itibariyle children olarak geçebildiğimiz değerler arasında JS nesneleri de yer alıyor. Fonksiyon, JS’de bir nesne olduğuna göre rahatlıkla bir fonksiyonu JSX children olarak verebiliriz. Örnek;



Yukarıdaki örneklerle JSX 'in bütün özelliklerini açıklamış olduk. Bundan sonra yapacağız işlerde kullanımı size göre farklılaşacaktır ama temel kullanım yukarıdakilerden farklı olmayacaktır.



Beğendiyseniz lütfen destek olmayı ve üye olup beni takip etmeyi unutmayın.



İyi çalışmalar





Küçük bir destek binlerce beğeniden daha değerlidir
https://bylge-images.s3.amazonaws.com/wheat-3241114_1920.jpg
Ali Söylemez

Endüstri Mühendisi, Yazılımcı - Bylge.com Kurucusu

Bylge Icon
Bylge Icon