ReactJS Component

React component illustration by kirupa.com

Melanjutkan catatan saya sebelumnya mengenai pembelajaran ReactJS di codecademy.com kali ini kita akan belajar mengenai dasar dari react component. Tidak hanya mengenai react component, tapi kita juga akan sedikit mereview apa yang sudah kita pelajari di tulisan saya sebelumnya.

Sebelumnya apa sih react component itu? Jika kita membuat aplikasi dengan react kita pasti selalu menggunakan component. Component adalah potongan kode kecil yang dapat di gunakan kembali (reusable) yang bertujuan agar user interface terpisah menjadi bagian-bagian kecil dan di satukan dan di render menjadi sebuah kode HTML.

Component Class

Ok sekarang kita akan langsung masuk ke contoh koding untuk membuat component class. Setiap component selalu di awali dengan component class, yang merupakan sebuah method yang dapat membuat component pada react. Untuk membuat component react kita menggunakan React.createClass. Perhatikan kode berikut.

var React = require('react');
var ReactDOM = require('react-dom');

var MyComponentClass = React.createClass({
    render: function () {
        return <h1>Hello world</h1>;
    }
});

ReactDOM.render(
    <MyComponentClass />,
    document.getElementById('app')
);

Kode diatas adalah contoh sederhana dalam membuat component pada react dengan method React.createClass yang di simpan dalam sebuah variabel MyComponentClass. Tetapi sebelum kita membahas lebih jauh mengenai component class ini, untuk mereview tulisan sebelumnya saya juga akan menjelaskan struktur dan sintaks lain pada kode diatas.

Import React

Pada baris kode pertama var React = require('react'); akan mengembalikan sebuah object javascript yang di simpan dalam sebuah variabel yang dinamakan React, object ini berisi beberapa method yang dapat di gunakan pada project react kita.

var React = require('react');

Pengembalian object ini disebut dengan React library. Pada tulisan saya sebelumnya, kita sudah belajar bagaimana menggunakan React library seperti React.createElement. Yang memanggil elemen JSX untuk di compile. Untuk alasan ini kita harus me-require React library dan menyimpannya dalam sebuah variabel yang dinamakan React.

Import ReactDOM

var ReactDOM = require('react-dom');

Sama seperti require('react'), require('react-dom') juga mengembalikan sebuah object javascript. Namun keduanya berisi react method yang berbeda, require('react-dom') di khsuskan untuk berinteraksi dengan DOM, pada kode di atas kita menggunakan method ReactDOM.render.

Render Component

ReactDOM.render(
    <MyComponentClass />,
    document.getElementById('app')
);

Pada kode diatas kita merender component react yang sudah kita buat. Untuk membuat memanggil render function pada sebuah component, passing component tersebut kepada method ReactDOM.render. ReactDOM.render akan menampilkan <h1>Hello world</h1> yang di return pada component class ke sebuah virtual DOM, dan akan terlihat pada browser Hello world.

Membuat Component Class

Untuk membuat component class, kita gunakan salah satu methods dalam library React, React.createClass. Method React.createClass adalah merupakan salah satu method dari object yang di definisikan dari require(‘react’) pada baris pertama.

var MyComponentClass = React.createClass({
    render: function () {
        return <h1>Hello world</h1>;
    }
});

Component Class Naming Convesion

Ketika kita membuat sebuah component class baru, kita harus menyimpannya pada sebuah variabel, sehingga kita dapat menggunakan kembali component class tersebut. Pada contoh kode di atas kita membuat component class yang di simpan pada variabel yang kita namai MyComponentClass.

var MyComponentClass = React.createClass();

Nama variabel pada component class harus menggunakan huruf besar pada huruf di kata pertama. Ini merupakan naming convention pada react yang harus kita ikuti. Nama class harus di tulis dengan cara UpperCamelCase.

Instruksi Component Class

React.createClass akan mengesekusi sebuah argument. Yang mana argument tersebut harus merupakan sebuah javascript object. Object ini akan berperan sebagai instruksi dan menjelaskan kepada component class bagaimana membuat react component. Pada contoh React.createClass akan mengambil nilai sebuah JSX. Berikut adalah object pada contoh kode di atas.

{
   render: function () {
     return <h1>Hello world</h1>;
   }
}

Render Function

Sekarang saya akan menjelaskan instruksi apa yang sebenarnya di kirimkan oleh React.createClass. Pertama, instruksi ini harus di simpan sebagai object. Untuk contoh kita akan membuat sebuah variabel yang berisi object.

var instruction = {};

Hanya ada satu property yang bisa kita masukan pada object tersebut. yaitu render function. Render function adalah sebuah properti yang dapat di namai render dan nilainya adalah sebuah function. Istilah “render function” dapat merujuk ke keseluruhan properti, atau hanya bagian fungsi.

var instructions = {
    render: function() {}
}

Untuk dapat merender, sebuah function harus mempunyai sebuah return statement. Biasanya statement ini me-return ekspressi JSX.

var instructions = {
    render: function() {
        return <h1>hello world<h1>;
    }
}

Mendifinisikan Instruksi pada sebuah Function

Menyimpan instruksi object ke dalam sebuah variabel seperti contoh di atas adalah cara yang baik untuk mengilustrasikan bagaimana ia bekerja, namun pada prakteknya itu sangat jarang terjadi. Biasanya kita langsung memasukan object di dalam method React.createClass.

Membuat Component Instance

MyComponentClass sekarang sudah bekerja sebagai component class dan dapat di gunakan untuk membuat sebuah react component. Sebuah instance component pada react dibuat dengan hanya satu baris:

<MyComponentClass />

Untuk membuat sebuah react component, kita dapat menuliskan dalam format elemen JSX. Elemen JSX bisa berupa HTML atau component instance. JSX menggunakan kapitalisasi untuk membedakan keduanya. Itulah sebabnya nama class component harus di awali dengan huruf besar. Dalam elemen JSX, huruf pertama yang di kapitalisasi itu artinya merupakan component instance bukan tag HTML.

JSX pada React Component

Nah sekarang kita sudah bisa membuat sebuah component pada react. Component react biasanya me-return kode JSX, aturan penulisan kode JSX ini pun sama seperti yang sudah saya jelaskan pada tulisan sebelumnya. Tapi ada beberapa hal penting yang juga mengikuti aturan penulisan pada component react.

Operasi Logika pada Render Function

Function render harus mempunya sebuah return statement. Namun, tidak hanya itu kemampuannya. Function render juga dapat di jadikan tempat untuk menaruh kode kalkulasi sederhana ataupun sebuah proses logika. Lihat dua contoh kode berikut.

var Random = React.createClass({
    render: function () {

        // First, some logic that must happen
        // before rendering:
        var n = Math.floor(Math.random()*10+1);

         // Next, a return statement
        // using that logic:
        return <h1>The number is {n}!</h1>;
    }
});
var task;
if (!apocalypse) {
    task = "learn React.js"
} else {
    task = "run around"
}

return <h1>Today I am going to {task}!</h1>;

Menggunakan Keyword this pada Component

Keyword this dapat di gunakan pada React. Kita akan sering melihat this di dalam objet yang di pass pada React.createClass. Perhatikan contoh berikut.

var IceCreamGuy = React.createClass({
    food: 'ice cream',

    render: function () {
        return <h1>I like {this.food}.</h1>;
    }
});

Event Listener di dalam Component

Function render biasanya juga terdapat event listener seperti ini:

render: function () {
    return (
        <div onHover={myFunc}> </div>
    );
}

Contoh event handler diatas adalah sebuah function, pada contoh di atas function event handler dinamakan dengan myFunc. Dalam React kita mendefinisikan event handlers sebagai property value dari sebuah instruksi pada object. Lihat contoh di bawah ini.

React.createClass({
    myFunc: function () {
        alert('Stop it. Stop hovering.');
    },

    render: function () {
        return (
            <div onHover={this.myFunc}></div>;
        );
    }
});

Pada contoh di atas object pada React.createClass mempunyai dua properti yaitu myFunc dan render. myFunc di gunakan sebagai event handler. myFunc akan di panggil setiap kali user hovers diatas <div></div> yang di render.

Penutup

Ok, sampai sini dulu ya catatan pembelajaran saya mengenai ReactJS di codecademy.com. Semoga juga bisa bermanfaat buat temen-temen programmer. Buat yang mau belajar bareng dan diskusi boleh langsung tinggalin komentarnya di bawah.