readonlyMiddleware
Overview
Attaches an action middleware that will throw when any action is started over the node or any of the child nodes, thus effectively making the subtree readonly. It will return an object with a dispose
function to remove the middleware and an allowWrite
function that will allow actions to be started inside the provided code block.
Example:
// given a model instance named `todo`
const { dispose, allowWrite } = readonlyMiddleware(todo)
// this will throw
todo.setDone(false)
await todo.setDoneAsync(false)
// this will work
allowWrite(() => todo.setDone(false))
// note: for async always use one action invocation per `allowWrite`!
await allowWrite(() => todo.setDoneAsync(false))