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

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

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

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を返す