Riot.js cheatsheet
This article was originally published at https://gist.github.com/joepie91/ed3a267de70210b46fb06dd57077827a.
Component styling
This section only applies to Riot.js 2.x. Since 3.x, all styles are scoped by default and you can simply add a style
tag to your component.
- You can use a
<style>
tag within your tag. This style tag is applied globally by default. - You can scope your style tag to limit its effect to the component that you've defined it in. Note that scoping is based on the tag name. There are two options:
- Use the
scoped
attribute, eg.<style scoped> ... </style>
- Use the
:scope
pseudo-selector, eg.<style> :scope { ... } </style>
- You can change where global styles are 'injected' by having
<style type="riot"></style>
somewhere in your<head>
. This is useful for eg. controlling what styles are overridden.
Mounting
"Mounting" is the act of attaching a custom tag's template and behaviour to a specific element in the DOM. The most common case is to mount all instances of a specific top-level tag, but there are more options:
- Mount all custom tags on the page:
riot.mount("*")
- Mount all instances of a specific tag name:
riot.mount("app")
- Mount a tag with a specific ID:
riot.mount("#specific_element")
- Mount using a more complex selector:
riot.mount("foo, bar")
Note that "child tags" (that is, custom tags that are specified within other custom tags) are automatically mounted as-needed. You do not need to riot.mount
them separately.
The simplest example:
<script>
// Load the `app` tag's definition here somehow...
document.addEventListener("DOMContentLoaded", (event) => {
riot.mount("app");
});
</script>
<app></app>
Tag logic
- Conditionally add to DOM:
<your-tag if="{ something === true }"> ... </your-tag>
- Conditionally display:
<your-tag show="{ something === true }"> ... </your-tag>
(but the tag always exists in the DOM) - Conditionally hide:
<your-tag hide="{ something === true }"> ... </your-tag>
(but the tag always exists in the DOM) - For-each loop:
<your-tag for="{ item in items }"> ... (you can access 'item' from within the tag) ... </your-tag>
(one instance ofyour-tag
for eachitem
initems
) - For-each loop of an object:
<your-tag for="{ key, value in someObject }"> ... (you can access 'key' and 'value' from within the tag) ... </your-tag>
(this is slow!)
All of the above also work on regular (ie. non-Riot) HTML tags.
If you need to add/hide/display/loop a group of tags, rather than a single one, you can wrap them in a <virtual>
pseudo-tag. This works with all of the above constructs. For example:
<virtual for="{item in items}">
<label>{item.label}</label>
<textarea>{item.defaultValue}</textarea>
</virtual>