From a React developer’s perspective

WebAssembly, popularly often called WASM, has revolutionized how internet purposes are constructed. It has allowed builders to make use of their favorite programming languages to construct internet purposes.
With these prospects, builders are usually not tasked with the burden of studying a JavaScript-based framework when constructing a frontend utility. They’ll leverage their favorite programming language options like static typing, sample matching, reminiscence security, e.t.c, to construct frontend purposes.
Yew is a contemporary Rust-based framework for constructing frontend purposes utilizing WebAssembly.
On this publish, we are going to learn to construct an internet utility utilizing open API knowledge from DummyJSON and Yew as a React developer.
GitHub repository could be discovered right here.
The next are the similarities between the 2 applied sciences:
To totally grasp the ideas introduced on this tutorial, the next necessities apply:
- Fundamental understanding of React
- Fundamental understanding of Rust
- Rust set up
First, we have to guarantee the newest model of Rust is put in on our machine. We will improve to the steady model by operating the command under:
rustup replace
Subsequent, we have to set up a WASM goal, a instrument that helps us compile our Rust supply code into browser-based WebAssembly and makes it run on an internet browser. We will set up it by operating the command under:
rustup goal add wasm32-unknown-unknown
Lastly, we have to set up Trunk, a instrument for managing and packaging WebAssembly purposes. We will do that by operating the command under:
cargo set up trunk
To get began, we have to navigate to the specified listing and run the command under in our terminal:
cargo new yew-starter && cd yew-starter
This command creates a Rust undertaking referred to as yew-starter
and navigates into the undertaking listing.
cargo
is Rust’s bundle supervisor. It really works equally to npm
within the React ecosystem.
On operating the command, cargo
will generate a undertaking listing with fundamental recordsdata as proven under:

foremost.rs
is the entry level of our utility.
Cargo.toml
is the manifest file for specifying undertaking metadata like packages, model, e.t.c. It really works equally to bundle.json
in a React utility.
Subsequent, we proceed to put in the required dependencies by modifying the [dependencies]
part of the Cargo.toml
file as proven under:
yew = “0.19”
is a Rust-based frontend framework
serde = “1.0.136”
is a framework for serializing and deserializing Rust knowledge buildings. E.g. convert Rust structs to a JSON.
gloo-net= “0.2”
is a HTTP requests library. It really works equally to axios in React ecosystem.
wasm-bindgen-futures = “0.4”
is a Rust-based library for performing asynchronous programming in Yew by bridging the hole between Rust asynchronous programming (futures) and JavaScript Guarantees
. Principally, It helps leverage Promise
-based internet APIs in Rust.
We have to run the command under to put in the dependencies:
cargo construct
With the undertaking dependencies put in, we have to modify the foremost.rs
file contained in the src
folder as proven under:
Oops! It appears to be like like quite a bit is occurring within the snippet above. Let’s break it down a bit.
use yew::prelude::*
: Imports the required yew
dependency and its associates by specifying *
#[function_component(App)]
: Declares the app
perform as a Practical element with App
because the title. The syntax used right here is named Rust macros; macros are code that writes different codes.
fn app() -> Html {…..}
: Makes use of the html!
macro to create Yew for React builders
markup. The macro works equally to JSX
in React.
yew::start_app::<App>()
: Begins a Yew utility by mounting the App
element to the physique of the doc. It really works equally to ReactDOM.render
perform in React.
HTML Render
Equally to the way in which React renders into the DOM, the identical rules apply in Yew. Subsequent, we have to create an index.html
file with Bootstrap CDN assist within the root listing of our undertaking and add the snippet under:

Subsequent, we are able to take a look at our utility by beginning the event server by operating the command under in our terminal:
trunk serve --open

Now that we have now grasp of how Yew works, we are able to proceed to construct an utility that integrates DummyJSON’s consumer API.
Module system in Rust
In React, parts type the constructing block of an utility. In our utility, we are going to use Rust Module system to construction our utility.
To do that, we have to navigate to the src
folder and create the element
and mannequin
folder with their corresponding mod.rs
file to handle visibility.

To make use of the code within the modules, we have to declare them as a module and import them into the foremost.rs
file as proven under:
Creating Fashions
With that achieved, we have to create fashions to symbolize the response returned from the API. To do that, we have to navigate to the fashions
folder, right here, create a consumer.rs
file, and add the snippet under:
The snippet above does the next:
- Imports the required dependency
- Makes use of the
derive
macro to generate implementation assist for formatting the output and deserializing the info construction. The#[serde(rename_all = “camelCase”)]
macro converts snake case properties to camel case (The API returns knowledge in camel case) - Creates a
Person
struct with required properties wanted from the API nested response - Creates a
Customers
struct with acustomers
property; an array kind ofPerson
struct. Dynamic arrays in Rust are represented as a vector
Pattern of API response from DummyJSON under:
PS: The pub
modifier makes the struct and its property public and could be accessed from different recordsdata/modules.
Subsequent, we should register the consumer.rs
file as a part of the fashions
module. To do that, open the mod.rs
within the fashions
folder and add the snippet under:
Creating Elements
With the fashions absolutely setup, we are able to begin creating our utility constructing blocks.
First, we have to navigate to the parts
folder and create a header.rs
file and add the snippet under:
The snippet above creates a Header element to symbolize our utility header.
Secondly, we have to create a loader.rs
file in the identical parts
folder and add the snippet under:
The snippet above creates a Loader element representing a UI when our utility is loading.
Thirdly, we have to create a message.rs
file in the identical parts
folders and add the snippet under:
The snippet above does the next:
- Imports the required dependency
- Creates a
MessageProp
struct withtextual content
andcss_class
properties to symbolize the element property. The#[derive(Properties, PartialEq)]
macros marks the struct as a element prop much like a React utility - Destructures the props and use them as CSS class and show textual content within the markup
Fourthly, we have to create a card.rs
file in the identical parts
folders and add the snippet under:
The snippet above does the next:
- Imports
yew
dependency and thePerson
mannequin we created earlier - Creates a
CardProps
element props with a consumer property - Destructures the props to show the consumer info within the UI
Lastly, we should register the newly created parts as a part of the parts
module. To do that, open the mod.rs
within the parts folder and add the snippet under:
Placing all of it collectively
With the applying parts created, we are able to begin utilizing them to construct our utility by modifying the foremost.rs
file as proven under:
The snippet above does the next:
- Imports the required dependencies
- Line 13–14: Creates a
customers
anderror
utility state by utilizing theuse_state
hook (much likeusestate
hook in React) and specifyingNone
because the preliminary worth. TheUseStateHandle
struct is used to specify the state kind and theChoice
enum represents an elective worth - Line 18–19: Creates a replica of the states for protected use inside the present scope
- Line 21–42: Makes use of the
use_effect_with_deps
hook much like theuseEffect
in React to carry out a aspect impact of fetching knowledge from the DummyJSON API asynchronously with thewasm_bindgen_futures
andgloo_net
’sRequest::get
perform. We additionally use thematch
management movement to match JSON response returned by updating the states accordingly - Line 44–66: Creates a
user_list_logic
variable to summary our utility logic by utilizing thematch
management movement to match patterns by doing the next:
– Maps via the listing ofcustomers
and cross the personconsumer
to theCard
element when the API returns applicable knowledge
– Makes use of theMessage
andLoader
element to match error and loading state, respectively - Line 68–73: Updates the markup with the
Header
element anduser_list_logic
abstraction
With that achieved, we are able to restart a growth server utilizing the command under:
trunk serve --open

This publish mentioned how you can create an internet utility utilizing Open API knowledge from DummyJSON and Yew.
These assets is perhaps useful: