Magic Contexts
Contents
Magic Contexts¶
In the Store guide, we
briefly mentioned that Store
objects
can be used with the mk.magic
context.
In this section, we will:
Explain what the magic context is
Show how to use the magic context
Show limitations of the magic context
Understanding alternatives to the magic context
Understand best practices for magic
What is the magic context?¶
Important
Use the mk.magic
context to make methods and attribute access on Store
objects reactive.
The magic
context is a special context in which methods and attribute access for Store
objects become reactive.
This means that you can use Store
objects in a more natural way, without having to worry about whether or not the statement you’re writing is reactive.
Example¶
For example, consider an object Greeting
that has an attribute name
and a method get_intro
.
class Greeting:
def __init__(self, name):
self.name = name
def get_intro(self):
return f"Hello {name}!"
Typically, accessing attributes of the wrapped object and calling methods on the wrapped object are not reactive.
greeting = mk.Store(Greeting("Meerkat"))
# Neither of these statements are reactive.
name = greeting.name
intro = greeting.get_intro()
# Even when we indicate the store has updated,
# the statements above are not reactive, so they
# wont update.
greeting.name = "Rhino"
greeting.set(Greeting("Rhino"), triggers=True)
With the magic
context, we can access name
and call get_intro
method in a reactive way.
greeting = mk.Store(Greeting("Meerkat"))
with magic():
name = greeting.name
intro = greeting.get_intro()
# Now, when we update the store, the statements above
# will update.
greeting.name = "Rhino"
greeting.set(Greeting("Rhino"), triggers=True)
print("name:", name)
print("intro:", intro)