code: function _update() {
          if (d.$destroyed) return consoler.warn('Directive "' + name + '" already destroyed.')
  
          var hasDiff = false
          // empty expression also can trigger update, such `r-text` directive
          if (!isExpr || isConst) {
              if (shouldUpdate && shouldUpdate.call(d)) {
                  upda && upda.call(d)
              }
          } else {
              var nexv = d.$exec(expr, mutable || !customDiff) // [error, result]
              var r = nexv[1]
              var payload = {}
              if (!nexv[0]) {
                  if (customDiff) {
                      hasDiff = customDiff.call(d, r, prev)
                  } else {
                      r = util.cloneAndDiff(r, prev, payload)
                      hasDiff = !!payload.diff
                  }
                  if (hasDiff && (!shouldUpdate || shouldUpdate.call(d, r, prev))) {
                      var p = prev
                      prev = r
                      upda && upda.call(d, r, p)
                  }
              }
          }
          afterUpdate && afterUpdate.call(d, hasDiff)
      }
docs: update handler