Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vue.jsのreactive周りの仕組みをコードを読んで理解してみる

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 Vue.jsのreactive周りの仕組みをコードを読んで理解してみる

Avatar for Kaido Iwamoto

Kaido Iwamoto

March 15, 2024
Tweet

More Decks by Kaido Iwamoto

Other Decks in Programming

Transcript

  1. RefImpl クラス (1) valueプロパティのgetter/setterがある _value に toReactive() した値 オブジェクトなら reactive()

    でラップ、それ以外はそのまま _rawValue に toRaw() した値 値がreactiveならアンラップしたもの
  2. RefImpl クラス (2) getter trackRefValue を呼ぶ _value を返す setter toRawした新しい値を

    _rawValue と比較する 変化していれば、 _value と _rawValue に代入し、 triggerRefValue を呼ぶ
  3. trackRefValue 関数 Refオブジェクトに dep?: Map<ReactiveEffect, number> というプロパティがある キーはRefを参照しているReactiveEffectで、値は何回目の実行か( _trackId )

    一方、ReactiveEffectはdepsというプロパティにdepの配列を持っている depがundefinedなら初期化する trackEffect を呼んで現在実行中のReactiveEffectに値が参照されたことを知らせる
  4. doWatch 関数(2) effect = ReactiveEffect(getter, NOOP, scheduler) でReactiveEffectを初期化 する unwatch

    関数 effectのstopを呼んで無効化する immediateオプションがtrueの場合はeffectを実行して結果をoldValueに入れておく 実行するとscheduler→job→コールバックの流れで呼ばれる unwatchを返す