# Custom Directives You can register custom directives using the `.directive()` method. ## Interface A directive is a function that receives a context object: ```js const myDirective = (ctx) => { // the element the directive is on ctx.el; // the raw value expression // e.g. lu-my-dir="x" then this would be "x" ctx.exp; // lu-my-dir:foo -> "foo" ctx.arg; // lu-my-dir.mod -> { mod: true } ctx.modifiers; // evaluate the expression and get its value ctx.get(); // evaluate arbitrary expression in current scope ctx.get(`${ctx.exp} + 10`); // run reactive effect ctx.effect(() => { // this will re-run every time the get() value changes console.log(ctx.get()); }); return () => { // cleanup if the element is unmounted }; }; // register the directive createApp().directive("my-dir", myDirective).mount(); ``` ## Example: lu-html implementation Here is how the built-in `lu-html` is implemented: ```js const html = ({ el, get, effect }) => { effect(() => { el.innerHTML = get(); }); }; ``` ## Example: lu-focus ```js const focus = ({ el }) => { el.focus(); }; createApp().directive("focus", focus).mount(); ``` ```html ```