Hands-on with the Marko JavaScript framework

Maria J. Danford

Innovation in total-stack, server-aspect rendering JavaScript frameworks continues apace. Marko is developed beneath the aegis of eBay, who uses it in their e-commerce web site. Marko is meant to be an easy-to-master and superior-performance framework.

Ryan Carniato, creator of SolidJS, has been associated in the advancement of Marko. He describes it as “built specifically to handle the superior performance demands of eBay’s platform.” Looking at eBay draws 307 million month-to-month consumers, Marko can nearly undoubtedly handle your use situation.

Marko factors

Let us start off our exploration of Marko with its element technique. Marko has 1 of the easiest element definition and discovery methods nonetheless devised. You can see a uncomplicated element definition right here, a color picker. Detect that in the primary index.marko file, there is an HTML ingredient referred to as , alongside with a house made up of an array of hexidecimal shades. How does Marko obtain the color-picker element?

The reply is that Marko begins at the listing wherever the element use is uncovered, then, beginning at the sibling directories, moves up looking for a /element listing made up of the expected element definition. If no such element is uncovered in that application code, Marko will change to set up dependencies and scan them as effectively.

Take note that Marko searches upward, so that directories in different branches are not knowledgeable of each and every other. This offers a form of scoping for the factors.

In our situation, Marko doesn’t have to search considerably, due to the fact there is a /factors/color-picker/index.marko file. (Marko also will load factors from a file with the element identify in the factors listing, or a file within the element listing with the element identify as folder and file.)

If you search at the /factors/color-picker/index.marko file, you will see the color-picker element definition proven in Listing 1.

Listing 1. color-picker.marko

import getDefaultColors from '../../util/getDefaultColors.js'

  onInput(enter) getDefaultColors()

    this.point out =
      selectedColor: shades[],

    this.point out.selectedColor = color


Listing 1 consists of the primary aspects of a element. It begins by importing yet another JS file with an import assertion (a uncomplicated JavaScript function it will use if no shades are handed in). Subsequent, it defines the JavaScript constructions it will have to have in this situation, a course and a function. Past is the actual template markup, which is principally pulling in two other factors, the header and the footer.

Let us get a closer search at that course definition. It defines two strategies.

House enter

The 1st method is onInput(). This is a lifecycle method that gets an enter argument, and lets for modifying the component’s point out (more on point out down below).

Detect the enter variable. That is a reserved identifier in Marko that resolves to the attributes handed in from the father or mother higher than. Don’t forget that the primary element contained a house on the ingredient shades that pointed to a tough-coded listing of hexidecimal shades. Those are now accessed by the youngster element through the enter.shades house. Attributes are fully reactive, meaning the technique will ensure that every little thing dependent on the props will be current.

Event managing

The next method on the course is handleColorSelected, which is a personalized event handler. You can see that handler in use in Listing 1 wherever the footer is placed:

Translation: When the on-color-picked event is activated, contact the handleColorSelected method, passing no matter what arguments are current.

Condition in Marko

Condition in Marko is comparable to Respond in that it is expected to be immutable, meaning that 1 will have to assign a new point out to update a one house. Marko does deliver a way to force-result in an update of point out:


Like in other reactive frameworks, point out in Marko styles the inside point out of the element. The reactive technique is dependable for carrying out updates of the UI and other values that are dependent on that point out.

Iterating and boosting occasions in Marko

Now let’s get a search at how the footer element does two matters: iterates in excess of the color props and triggers its on-color-picked event.

The code for color-picker-footer/index.marko is proven in Listing two.

Listing two. color-picker-footer


          on-color-picked("handleColorSelected", color)/>


You can see the iteration get the job done is completed with the tag.  The tag can specify its iterator variable with the identify within the | symbols. In this situation, the iterator is supplied the identify color. The collection to be iterated in excess of is determined with the of house, in this situation referring to enter.shades handed in from the father or mother.

Every single member of the enter.shades variable will be output as a div, with accessibility to the color variable. This is comparable in syntax to other frameworks like Respond.

Emitting occasions in Marko

Most of the get the job done of the color choosing through click is taken care of by the color-picker-selection element, which is output within the for iterator, alongside with the color house and the handler for on-color-picked.

Listing 3 demonstrates the color-picker-selection element.

Listing 3. color-picker-selection element


design and style
    width: 25px
    top: 25px
    border-radius: 5px 5px 5px 5px
    display screen: flex
    flex-direction: column
    margin: 5px 0px 0px 5px
    float: remaining

  design and style=
    backgroundColor: enter.color

Most of color-picker-selection is devoted to defining the structure (i.e., the tiny colored squares that make it possible for for clicking a color). In this article you see CSS as portion of a component’s composition, in the design and style block, which defines the tiny rounded square. Take note that you can also define CSS in a different .css file with the identify design and style.css. You can see this latter approach in the /color-picker-selection listing.

In the template markup, observe the inline design and style that is employed to set the track record color to the hexadecimal color set on enter.color.

Also notice how the on-click and on-touchstart occasions are employed to capture interaction from the consumer with the color square. The event is handed to handleColorSelected, which is defined at the head of the file. It uses this.emit("color-picked") to fireplace a personalized color-picked event.

Remember that color-picker-footer watches for personalized occasions with on-color-picked("handleColorSelected", color). Detect the handler is calling handleColorSelected and passing the color variable. But wherever is this function defined?

Component definition adaptability

The reply is it is defined in the different element.js file in the same listing, comparable to the different design and style.css file you saw previously. The potential to set the discrete parts of the element into 1 file or into different files (or a mixture of equally) lets for awesome adaptability in how you define factors as they improve from uncomplicated to complicated.

Await tag in Marko

Marko also involves an tag for managing asynchronous rendering. The tag lets you to move in a assure, and the framework will offer with waiting for its result and only display screen it when it becomes offered. (This is analogous to the likewise named element in Svelte.)

The tag simplifies dealing with asynchronous output.

A uncomplicated and surprise-no cost framework

Marko lives up to its assure to be uncomplicated to master. For 1 thing, it athletics only a tiny amount of vital main tags to master. For yet another, these tags are rather easy and get the job done in harmony with the theory of the very least surprise. And Marko is a total-stack framework, so you are also having server-aspect rendering out-of-the-box, with integrations for servers like Categorical.

Mixed with the intuitive element definition technique, bundlers for Webpack and Rollup, and top rated-shelf performance, Marko will make a robust situation to be your upcoming JavaScript framework.

Copyright © 2021 IDG Communications, Inc.

Next Post

The future of the operational data warehouse

In the very last five years, we’ve witnessed the cloud data warehouse, exemplified by Snowflake and BigQuery, turn into the dominant device for large and small companies that have to have to blend and examine data. The original use conditions are normally vintage choice guidance. What is my profits? How […]

Subscribe US Now