FAQs
Contents
FAQs¶
How do we make code reactive?¶
mk.reactive
is used to manage reactivity in Meerkat.
Code that is wrapped in mk.reactive
is tracked and re-run if the inputs change.
For example, in the code below, if the value of a
or b
changes then value of c
will be automatically updated:
a = mk.Store(1)
b = mk.Store(2)
with mk.reactive():
c = a + b
mk.reactive
can be used as a decorator to make a function reactive.
If either inputs to the function (a
or b
) change, the add
function will be re-run and the value of c
will be automatically updated.
@mk.reactive()
def add(a, b):
return a + b
a = mk.Store(a)
b = mk.Store(b)
c = add(a, b) # this operation will be tracked
Is all code inside with mk.reactive()
reactive?¶
No, only code that uses reactive types (DataFrames
and Stores
) will be tracked.
For example, the code below will not be tracked:
a = 1
b = 2
with mk.reactive():
c = a + b # this is the sum of two integers, it will not be tracked
If a function is decorated, you should pass in reactive types as inputs. Inputs of primitive types (int, str, etc.) will be auto-wrapped as stores, but this is not recommended.
How do we turn off reactivity?¶
We can wrap code with the @unmarked()
decorator or the with unmarked()
context manager.
How do we create a passively reactive function?¶
Sometimes, we may want a function to be passively reactive: if reactivity is on, the function should be reactive. If it is off, then it’s not reactive.
To make a function passively reactive, use the mk.reactiveive
decorator:
@mk.reactive()
def add(a, b):
return a + b
a = mk.Store(1)
b = mk.Store(2)
c = add(a, b) # this operation will not be tracked because reactivity is off by default
with mk.reactive(True):
d = add(a, b) # this operation will be tracked because we explicitly turned reactivity on