website/versioned_docs/version-0.20/concepts/basic-web-technologies/js.mdx
import Tabs from '@theme/Tabs' import TabItem from '@theme/TabItem'
Yew centrally operates on the idea of keeping everything that a reusable piece of UI may need in one place - rust files, while also keeping the underlying technology accessible where necessary.
As of today, WebAssembly is not feature-complete for DOM interactions. This means even in Yew we sometimes rely on calling Javascript. What follows is an overview of the involved libraries.
wasm-bindgen is a library and tool that enables calls to javascript from rust and back to rust from javascript.
We highly recommend you take a look at their documentation and our quick guide.
The web-sys crate provides bindings for Web APIs and allows us to write Javascript code in a rustyfied and safe way.
Example:
<Tabs> <TabItem value="JS" label="JS">let document = window.document
use wasm_bindgen::UnwrapThrowExt;
use web_sys::window;
let document = window()
.expect_throw("window is undefined")
.document()
.expect_throw("document is undefined");
Once again we highly recommend you take a look at their documentation and our quick guide.