pub struct PatchFlag { /* private fields */ }
Expand description
Patch flags are optimization hints generated by the compiler. when a block with dynamicChildren is encountered during diff, the algorithm enters “optimized mode”. In this mode, we know that the vdom is produced by a render function generated by the compiler, so the algorithm only needs to handle updates explicitly marked by these patch flags.
Check the patchElement
function in ‘../../runtime-core/src/renderer.ts’ to see how the
flags are handled during diff.
Implementations§
Source§impl PatchFlag
impl PatchFlag
Sourcepub const STYLE: Self
pub const STYLE: Self
Indicates an element with dynamic style The compiler pre-compiles static string styles into static objects and detects and hoists inline static objects e.g. style=“color: red” and :style=“{ color: ‘red’ }” both get hoisted as const style = { color: ‘red’ } render() { return e(‘div’, { style }) }
Sourcepub const PROPS: Self
pub const PROPS: Self
Indicates an element that has non-class/style dynamic props. Can also be on a component that has any dynamic props (includes class/style). when this flag is present, the vnode also has a dynamicProps array that contains the keys of the props that may change so the runtime can diff them faster (without having to worry about removed props)
Sourcepub const FULL_PROPS: Self
pub const FULL_PROPS: Self
Indicates an element with props with dynamic keys. When keys change, a full diff is always needed to remove the old key. This flag is mutually exclusive with CLASS, STYLE and PROPS.
Sourcepub const HYDRATE_EVENTS: Self
pub const HYDRATE_EVENTS: Self
Indicates an element with event listeners (which need to be attached during hydration)
Sourcepub const STABLE_FRAGMENT: Self
pub const STABLE_FRAGMENT: Self
Indicates a fragment whose children order doesn’t change.
Sourcepub const KEYED_FRAGMENT: Self
pub const KEYED_FRAGMENT: Self
Indicates a fragment with keyed or partially keyed children
Sourcepub const UNKEYED_FRAGMENT: Self
pub const UNKEYED_FRAGMENT: Self
Indicates a fragment with unkeyed children.
Sourcepub const NEED_PATCH: Self
pub const NEED_PATCH: Self
Indicates an element that only needs non-props patching, e.g. ref or directives (onVnodeXXX hooks). since every patched vnode checks for refs and onVnodeXXX hooks, it simply marks the vnode so that a parent block will track it.
Sourcepub const DYNAMIC_SLOTS: Self
pub const DYNAMIC_SLOTS: Self
Indicates a component with dynamic slots (e.g. slot that references a v-for iterated value, or dynamic slot names). Components with this flag are always force updated.
Sourcepub const DEV_ROOT_FRAGMENT: Self
pub const DEV_ROOT_FRAGMENT: Self
Indicates a fragment that was created only because the user has placed comments at the root level of a template. This is a dev-only flag since comments are stripped in production.
Sourcepub const HOISTED: Self
pub const HOISTED: Self
SPECIAL FLAGS ———————————————————–– Special flags are negative integers. They are never matched against using bitwise operators (bitwise matching should only happen in branches where patchFlag > 0), and are mutually exclusive. When checking for a special flag, simply check patchFlag === FLAG. Indicates a hoisted static vnode. This is a hint for hydration to skip the entire sub tree since static content never needs to be updated.
Sourcepub const BAIL: Self
pub const BAIL: Self
A special flag that indicates that the diffing algorithm should bail out of optimized mode. For example, on block fragments created by renderSlot() when encountering non-compiler generated slots (i.e. manually written render functions, which should always be fully diffed) OR manually cloneVNodes
Sourcepub const fn from_bits(bits: i32) -> Option<Self>
pub const fn from_bits(bits: i32) -> Option<Self>
Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.
Sourcepub const fn from_bits_truncate(bits: i32) -> Self
pub const fn from_bits_truncate(bits: i32) -> Self
Convert from underlying bit representation, dropping any bits that do not correspond to flags.
Sourcepub const unsafe fn from_bits_unchecked(bits: i32) -> Self
pub const unsafe fn from_bits_unchecked(bits: i32) -> Self
Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).
§Safety
The caller of the bitflags!
macro can chose to allow or
disallow extra bits for their bitflags type.
The caller of from_bits_unchecked()
has to ensure that
all bits correspond to a defined flag or that extra bits
are valid for this bitflags type.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Returns true
if there are flags common to both self
and other
.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Returns true
if all of the flags in other
are contained within self
.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Inserts or removes the specified flags depending on the passed value.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
Returns the intersection between the flags in self
and
other
.
Specifically, the returned set contains only the flags which are
present in both self
and other
.
This is equivalent to using the &
operator (e.g.
ops::BitAnd
), as in flags & other
.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
Returns the union of between the flags in self
and other
.
Specifically, the returned set contains all flags which are
present in either self
or other
, including any which are
present in both (see Self::symmetric_difference
if that
is undesirable).
This is equivalent to using the |
operator (e.g.
ops::BitOr
), as in flags | other
.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
Returns the difference between the flags in self
and other
.
Specifically, the returned set contains all flags present in
self
, except for the ones present in other
.
It is also conceptually equivalent to the “bit-clear” operation:
flags & !other
(and this syntax is also supported).
This is equivalent to using the -
operator (e.g.
ops::Sub
), as in flags - other
.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
Returns the symmetric difference between the flags
in self
and other
.
Specifically, the returned set contains the flags present which
are present in self
or other
, but that are not present in
both. Equivalently, it contains the flags present in exactly
one of the sets self
and other
.
This is equivalent to using the ^
operator (e.g.
ops::BitXor
), as in flags ^ other
.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
Returns the complement of this set of flags.
Specifically, the returned set contains all the flags which are
not set in self
, but which are allowed for this type.
Alternatively, it can be thought of as the set difference
between Self::all()
and self
(e.g. Self::all() - self
)
This is equivalent to using the !
operator (e.g.
ops::Not
), as in !flags
.
Trait Implementations§
Source§impl BitAndAssign for PatchFlag
impl BitAndAssign for PatchFlag
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
Disables all flags disabled in the set.
Source§impl BitOrAssign for PatchFlag
impl BitOrAssign for PatchFlag
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
Adds the set of flags.
Source§impl BitXorAssign for PatchFlag
impl BitXorAssign for PatchFlag
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
Toggles the set of flags.
Source§impl Extend<PatchFlag> for PatchFlag
impl Extend<PatchFlag> for PatchFlag
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl FromIterator<PatchFlag> for PatchFlag
impl FromIterator<PatchFlag> for PatchFlag
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
Source§impl Ord for PatchFlag
impl Ord for PatchFlag
Source§impl PartialOrd for PatchFlag
impl PartialOrd for PatchFlag
Source§impl SubAssign for PatchFlag
impl SubAssign for PatchFlag
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
Disables all flags enabled in the set.