Expand description
§dioxus-core
dioxus-core provides a fast and featureful VirtualDom implementation for Rust.
use dioxus_core::{VirtualDom, Event, Element, Mutations, VNode, ElementId};
let mut vdom = VirtualDom::new(app);
let real_dom = SomeRenderer::new();
loop {
tokio::select! {
evt = real_dom.event() => {
let evt = Event::new(evt, true);
vdom.runtime().handle_event("onclick", evt, ElementId(0))
},
_ = vdom.wait_for_work() => {}
}
vdom.render_immediate(&mut real_dom.apply())
}
§Features
A virtualdom is an efficient and flexible tree data structure that allows you to manage state for a graphical user interface. The Dioxus VirtualDom is perhaps the most fully-featured virtualdom implementation in Rust and powers renderers running across Web, Desktop, Mobile, SSR, TUI, LiveView, and more. When you use the Dioxus VirtualDom, you immediately enable users of your renderer to leverage the wide ecosystem of Dioxus components, hooks, and associated tooling.
Some features of dioxus-core include:
- UI components are just functions
- State is provided by hooks
- Deep integration with async
- Strong focus on performance
- Integrated hotreloading support
- Extensible system for UI elements and their attributes
If you are just starting, check out the Guides first.
§Understanding the implementation
dioxus-core is designed to be a lightweight crate that. It exposes a number of flexible primitives without being deeply concerned about the intracices of state management itself. We provide a number of useful abstractions built on these primitives in the dioxus-hooks crate as well as the dioxus-signals crate.
The important abstractions to understand are:
- The
VirtualDom - The
Componentand itsProperties - Handling events
- Working with async
- Suspense
§Usage
The dioxus crate exports the rsx macro which transforms a helpful, simpler syntax of Rust.
First, start with your app:
use dioxus::prelude::*;
// First, declare a root component
fn app() -> Element {
rsx! {
div { "hello world" }
}
}
fn main() {
// Next, create a new VirtualDom using this app as the root component.
let mut dom = VirtualDom::new(app);
// The initial render of the dom will generate a stream of edits for the real dom to apply
let mutations = dom.rebuild_to_vec();
}§Contributing
- Check out the website section on contributing.
- Report issues on our issue tracker.
- Join the discord and ask questions!
§License
This project is licensed under the MIT license.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Dioxus by you, shall be licensed as MIT, without any additional terms or conditions.
Re-exports§
pub use crate::innerlude::SuspenseBoundary;pub use crate::innerlude::SuspenseBoundary;pub use const_format;
Macros§
- anyhow
- Construct an ad-hoc error from a string or existing non-
anyhowerror value. - bail
- Return early with an error.
Structs§
- Attribute
- An attribute on a DOM node, such as
id="my-thing"orhref="https://example.com" - Callback
- The callback type generated by the
rsx!macro when anonfield is specified for components. - Captured
Error - An
anyhow::Errorwrapped in anArcso it can be cheaply cloned and passed around. - Element
Id - An Element’s unique identifier.
- Error
Context - A context with information about suspended components
- Event
- A wrapper around some generic data that handles the event’s state
- Listener
Callback - An owned callback type used in
AttributeValue::Listener. - Mutations
- A static list of mutations that can be applied to the DOM. Note: this list does not contain any
Anyattribute values - NoOp
Mutations - A struct that ignores all mutations
- Reactive
Context - Reactivity
- Runtime
- A global runtime that is shared across all scopes that provides the async runtime and context API
- Runtime
Guard - A guard for a new runtime. This must be used to override the current runtime when importing components from a dynamic library that has it’s own runtime.
- ScopeId
- A component’s unique identifier.
- Scope
State - A component’s rendered state.
- Subscribers
- A list of ReactiveContexts that are subscribed. This is used to notify subscribers when the value changes.
- Suspended
Future - A task that has been suspended which may have an optional loading placeholder
- Suspense
Boundary Props - Properties for the
SuspenseBoundary()component. - Suspense
Context - A context with information about suspended components
- Task
- A task’s unique identifier.
- Template
- A static layout of a UI tree that describes a set of dynamic and static nodes.
- VComponent
- An instance of a child component
- VNode
- A reference to a template along with any context needed to hydrate it
- VNode
Inner - A reference to a template along with any context needed to hydrate it
- VPlaceholder
- A placeholder node, used by suspense and fragments
- VText
- A text node
- Virtual
Dom - A virtual node system that progresses user events and diffs UI trees.
Enums§
- Attribute
Value - Any of the built-in values that the Dioxus VirtualDom supports as dynamic attributes on elements
- Dynamic
Node - A node created at runtime
- Mutation
- A
Mutationrepresents a single instruction for the renderer to use to modify the UI tree to match the state of the Dioxus VirtualDom. - Render
Error - An error that can occur while rendering a component
- Template
Attribute - An attribute of the TemplateNode, created at compile time
- Template
Node - A statically known node in a layout.
Traits§
- Anyhow
Context - Provides the
contextmethod forResult. - Component
Function - Any component that implements the
ComponentFntrait can be used as a component. - HasAttributes
- A trait for anything that has a dynamic list of attributes
- Into
Attribute Value - A value that can be converted into an attribute value
- Into
DynNode - A trait that allows various items to be converted into a dynamic node for the rsx macro
- Launch
Config - A marker trait for platform configs. We use this marker to make sure that the user doesn’t accidentally pass in a config builder instead of the config
- Properties
- Every “Props” used for a component must implement the
Propertiestrait. This trait gives some hints to Dioxus on how to memoize the props and some additional optimizations that can be made. We strongly encourage using the derive macro to implement thePropertiestrait automatically. - Spawn
IfAsync - A helper trait for
Callbacks that allows functions to accept aCallbackthat may return an async block which will automatically be spawned. - Subscriber
List - A list of subscribers that can be notified when the value changes. This is used to track when the value changes and notify subscribers.
- Super
From - A enhanced version of the
Fromtrait that allows with more flexibility. - Super
Into - A enhanced version of the
Intotrait that allows with more flexibility. - Write
Mutations - Something that can handle the mutations that are generated by the diffing process and apply them to the Real DOM
Functions§
- Error
Boundary - Create a new error boundary component that catches any errors thrown from child components
- Fragment
- Create inline fragments using Component syntax.
- Ok
- Equivalent to
Ok::<_, dioxus::CapturedError>(value). - Suspense
Boundary - Suspense Boundaries let you render a fallback UI while a child component is suspended.
- consume_
context - Consume context from the current scope
- consume_
context_ from_ scope - Consume context from the current scope
- current_
owner - Returns the current owner. This owner will be used to drop any
Copystate that is created by thegenerational-boxcrate. - current_
scope_ id - Get the current scope id
- fc_
to_ builder - This utility function launches the builder method so that the rsx! macro can use the typed-builder pattern to initialize a component’s props.
- generation
- Get the current render since the inception of this component.
- has_
context - Check if the current scope has a context
- needs_
update - Mark the current scope as dirty, causing it to re-render.
- needs_
update_ any - Mark the current scope as dirty, causing it to re-render.
- parent_
scope - Get the parent of the current scope if it exists.
- provide_
context - Provide context to the current scope
- provide_
root_ context - Provide a context to the root scope
- queue_
effect - Queue an effect to run after the next render. You generally shouldn’t need to interact with this function directly. use_effect will call this function for you.
- remove_
future - Informs the scheduler that this task is no longer needed and should be removed.
- schedule_
update - Schedule an update for the current component.
- schedule_
update_ any - Schedule an update for any component given its
ScopeId. - spawn
- Spawns the future and returns the
Task. This task will automatically be canceled when the component is dropped. - spawn_
forever - Spawn a future that Dioxus won’t clean up when this component is unmounted
- spawn_
isomorphic - Start a new future on the same thread as the rest of the VirtualDom.
- suspend
- Suspended the current component on a specific task and then return None
- throw_
error - Throw a
CapturedErrorinto the current scope. The error will bubble up to the nearestcrate::ErrorBoundary()or the root of the app. - try_
consume_ context - Consume context from the current scope
- use_
after_ render - Push this function to be run after the next render
- use_
before_ render - A hook that allows you to insert a “before render” function.
- use_
drop - Creates a callback that will be run before the component is removed.
This can be used to clean up side effects from the component
(created with
use_effect). - use_
hook - Store a value between renders. The foundational hook for all other hooks.
- use_
hook_ with_ cleanup - Use a hook with a cleanup function
- with_
owner - Run a closure with the given owner.
Type Aliases§
- Component
- A
Componentis a function that takesPropertiesand returns anElement. - Element
- An
Elementis a possibly-noneVNodecreated by callingrenderonScopeIdorScopeState. - Event
Handler - The callback type generated by the
rsx!macro when anonfield is specified for components. - Result
- A result type with a default error of
CapturedError.