Global Dot di NodeJS

Hati-hati pake objek global. di NodeJS. Nilai yang disimpen di situ di-share semua requests.

Contoh di bawah, semua request yg masuk setelah “A” dapet global.name = A biarpun asalnya dari user/browser/client lain.

router.get('/', function(req, res, next) {

  if(req.cookies.name === 'A') {
    global.name = 'A'
    console.log('REQUEST FROM A: global.name', global.name)    
  } else {
    console.log('REQUEST FROM OTHERS: global.name', global.name)
  }

  res.render('index', { title: global.name });
});

E-Book Gratis: ReactJS untuk Pemula

Pengen belajar ReactJS tapi bingung mulai dari mana? Udah baca-baca tutorial tapi penuh jargon yang malah bikin mumet?

E-book ini mungkin cocok buat Anda. 🙂

E-book ini bisa didapatkan di Leanpub.

NOTE1: E-book ini bisa diunduh gratis. Silakan geser slider harga di halaman Leanpub ke angka 0.

NOTE2: Silakan link Leanpub-nya di-share. Kalo bisa jangan langsung PDF-nya karena saya juga pengen tau berapa banyak orang yang unduh ebook ini.

NOTE3: Ebook ini bakal diupdate terus kalo ada materi baru yang sekiranya menarik untuk ditambahkan atau mungkin ada materi yang perlu dikoreksi.

Compound Component

Compound component adalah sebuah komponen yang terdiri dari komponen-komponen yang lebih kecil. Komponen-komponen ini kalo sendirian ga ada gunanya. Kalo di HTML biasa salah satu contohnya adalah komponen <select>.

<select>
  <option />
  <option />
</select>

Pattern ini adalah alternatif dari render-props. Tujuannya sama, bikin komponen yang fleksibel & struktur komponen children-nya terserah user/consumer.

useContext untuk Global State

Nggak semua aplikasi React butuh Redux/MobX atau library sejenisnya. Untuk banyak kasus kita bisa pake React Context aja.

Context punya dua bagian utama yaitu Provider yg nyediain variabel & fungsi-fungsi global, dan Consumer sebagai pemakainya.

Untuk bikin Provider, pertama kita buat context pake createContext(). Terus kita pake komponen Context.Provider.

import React, { useState, createContext } from 'react';
import Header from './Header';
import Mailbox from './Mailbox';
import './styles.scss';

export const AppContext = createContext();

export default function App() {
  // global state
  const [user, setUser] = useState(null);

  return (
    <AppContext.Provider
      value={{
        user,
        setUser
      }}
    >
      <div className="App">
        <Header />
        <Mailbox />
      </div>
    </AppContext.Provider>
  );
}

Kenapa objek context-nya perlu diekspor? Biar bisa dipake di komponen-komponen lain yang jadi consumer-nya.

Continue reading →