Apa itu reaktivitas?

Sejumlah besar fitur baru telah muncul di Ember Octane, tetapi tidak ada yang lebih menarik bagi saya daripada pelacakan otomatis (autotracking). Pelacakan otomatis adalah sistem reaktivitas baru Ember, yang memungkinkan Ember mengetahui kapan nilai status (misalnya, properti yang ditandai @tracked) telah berubah. Ini adalah pembaruan besar-besaran di bawah tenda, termasuk penulisan ulang lengkap beberapa abstraksi Ember tertua di atas kernel baru.


Dari penerjemah: Chris Garrett - bekerja untuk LinkedIn dan merupakan salah satu kontributor inti kerangka kerja Ember. Dia mengambil bagian aktif dalam menciptakan edisi baru kerangka kerja - Ember Octane. Terlepas dari kenyataan bahwa seri-nya ditulis untuk pengembang Ember, itu menyentuh konsep-konsep yang berguna untuk diketahui oleh semua programmer web.

Pelacakan otomatis, pada pandangan pertama, sangat mirip dengan model reaktivitas Ember Classic(berdasarkan pada sifat yang dihitung, pengamat dan Ember.set()). Jika Anda membandingkan keduanya secara berdampingan, perbedaan utama adalah di mana anotasi ditempatkan. Di Octane, Anda membubuhi keterangan properti tempat Anda bergantung, sementara di Classic, Anda membubuhi keterangan getter dan setter.


class OctaneGreeter {
  @tracked name = 'Liz';

  get greeting() {
    return `Hi, ${this.name}!`;
  }
}

class ClassicGreeter {
  name = 'Liz';

  @computed('name')
  get greeting() {
    return `Hi, ${this.name}!`;
  }
}

Tetapi jika Anda menggali lebih dalam, Anda akan menemukan bahwa pelacakan otomatis jauh lebih fleksibel dan kuat. Misalnya, Anda dapat secara otomatis melacak hasil fungsi , yang tidak dimungkinkan di Ember Classic. Ambil, misalnya, model untuk gim video 2d sederhana:


class Tile {
  @tracked type;

  constructor(type) {
    this.type = type;
  }
}

class Character {
  @tracked x = 0;
  @tracked y = 0;
}

class WorldMap {
  @tracked character = new Character();

  tiles = [
    [new Tile('hills'), new Tile('beach'), new Tile('ocean')],
    [new Tile('hills'), new Tile('beach'), new Tile('ocean')]
    [new Tile('beach'), new Tile('ocean'), new Tile('reef')],
  ];

  getType(x, y) {
    return this.tiles[x][y].type;
  }

  get isSwimming() {
    let { x, y } = this.character;

    return this.getType(x, y) === 'ocean';
  }
}

, isSwimming , character ( x / y). , , getType, . CP (. .: Computed Properties — Ember Classics), - . .


, Ember Classic. ! , , Ember , Octane.


-, , . , . , . , , , , .


7 . , « », , :


  1. ? ←
  2. ?
  3. — TrackedMap
  4. — @localCopy
  5. — RemoteData
  6. — effect()

, , Octane. -, , , ! Discord.


: «»?



, « », , . . , .


: .

«» , « » « ». , « Ember» « Vue», , . , .


, ! .

( (streams))


, , , , : «» (declarative) «» (state). « » , «» «» ? "" (state)? , , .


(state)


«» «». , , ; , "". JavaScript :


  • , let const
  • , Map Set

, (root state), , . , , , . :


let a = 1;
let b = 2;

function aPlusB() {
  return a + b;
}

aPlusB() , a b. , . , , a b, aPlusB(). , a b , aPlusB() , .



, «», «» «», , , . , :


, , , .
, - .

«» , (). , — « »? , , , , , , , ( , ).


aPlusB. , , :


  1. ( ).
  2. a + b.

let a = 1;
let b = 2;

let aPlusB = a + b;

, , . , a b. aPlusB , :


let a = 1;
let b = 2;

let aPlusB = a + b;

//  `a`
a = 4;
aPlusB = a + b;

//  `b`
b = 7;
aPlusB = a + b;

, . , a, aPlusB. API , , :


export default class Counter extends Component {
 count = 0;

  @action
    incrementCount() {
    this.count++;
    this.rerender();
  }
}

, rerender() , , . , , - , , .


, «» . aPlusB().


let a = 1;
let b = 2;

function aPlusB() {
  return a + b;
}

, , , . , «» , . , aPlusB() , . , , , .


, , Ember, Vue Svelte, (, ) JSX , , JSX . HTML — , , , . HTML, , . «» , , , DOM, , DOM , .


FP (Functional Programming)?


. «» «» «». , . , HTML, , - , .


( FP), . «» — .


let a = 1;
let b = 2;

function plus(first, second) {
  return first + second;
}

//  a + b;
plus(a, b);

. , , .



, ( ). , FP , , , . , , , .


, . , , , .


, , . , «» FP, - (, , . « », !). , .



, :


  1. «» « ». , , , .
  2. «» , . ( , ):
    • , , , .
    • — , , , .
  3. « » , , , . HTML , — , . , , .

. , , , - , - . , , «» .


: , . , , )


All Articles