|
3 年之前 | |
---|---|---|
.vscode | 3 年之前 | |
docs | 4 年之前 | |
examples | 3 年之前 | |
notes | 4 年之前 | |
packages | 3 年之前 | |
src | 4 年之前 | |
.gitignore | 4 年之前 | |
Cargo.toml | 3 年之前 | |
LICENSE | 4 年之前 | |
README.md | 3 年之前 |
Frontend that scales.
Dioxus is a portable, performant, and ergonomic framework for building cross-platform user experiences in Rust.
fn App(cx: Context<()>) -> DomTree {
let mut count = use_state(cx, || 0);
cx.render(rsx! {
h1 { "High-Five counter: {count}" }
button { onclick: move |_| count += 1, "Up high!" }
button { onclick: move |_| count -= 1, "Down low!" }
})
};
Dioxus can be used to deliver webapps, desktop apps, static pages, liveview apps, eventually mobile apps (WIP), and more. At its core, Dioxus is entirely renderer agnostic and has great documentation for creating new renderers for any platform.
If you know React, then you already know Dioxus.
<tr >
<th><a href="http://github.com/jkelleyrtp/dioxus">Web</a></th>
<th><a href="http://github.com/jkelleyrtp/dioxus">Desktop</a></th>
<th><a href="http://github.com/jkelleyrtp/dioxus">Mobile</a></th>
<th><a href="http://github.com/jkelleyrtp/dioxus">State</a></th>
<th><a href="http://github.com/jkelleyrtp/dioxus">Docs</a></th>
<th><a href="http://github.com/jkelleyrtp/dioxus">Tools</a></th>
<tr>
<!--
currently commented out until we have more content on the website
[Why we need a stronger typed web]()
[Isomorphic webapps in 10 minutes]()
[Rust is high level too]()
[Eliminating crashes with Rust webapps]()
[Tailwind for Dioxus]()
[The monoglot startup]() -->
TypeScript is a great addition to JavaScript, but comes with a lot of tweaking flags, a slight performance hit, and an uneven ecosystem where some of the most important packages are not properly typed. TypeScript provides a lot of great benefits to JS projects, but comes with its own "tax" that can slow down dev teams. Rust can be seen as a step up from TypeScript, supporting:
html!
, rsx!
) for fast template iterationAnd much more. Dioxus makes Rust apps just as fast to write as React apps, but affords more robustness, giving your frontend team greater confidence in making big changes in shorter time. Dioxus also works on the server, on the web, on mobile, on desktop - and it runs completely natively so performance is never an issue.
Dioxus is heavily inspired by React, but we want your transition to feel like an upgrade. Dioxus is most of the way there, but missing a few key features. This parity table does not necessarily include important ecosystem crates like code blocks, markdown, resizing hooks, etc.
Feature | Dioxus | React | Notes for Dioxus |
---|---|---|---|
Conditional Rendering | ✅ | ✅ | if/then to hide/show component |
Map, Iterator | ✅ | ✅ | map/filter/reduce to produce rsx! |
Keyed Components | ✅ | ✅ | advanced diffing with keys |
Web | ✅ | ✅ | renderer for web browser |
Desktop (webview) | ✅ | ✅ | renderer for desktop |
Shared State (Context) | ✅ | ✅ | share state through the tree |
Hooks | ✅ | ✅ | memory cells in components |
SSR | ✅ | ✅ | render directly to string |
Component Children | ✅ | ✅ | cx.children() as a list of nodes |
Headless components | ✅ | ✅ | components that don't return real elements |
Fragments | ✅ | ✅ | multiple elements without a real root |
Manual Props | ✅ | ✅ | Manually pass in props with spread syntax |
Controlled Inputs | ✅ | ✅ | stateful wrappers around inputs |
CSS/Inline Styles | ✅ | ✅ | syntax for inline styles/attribute groups |
Custom elements | ✅ | ✅ | Define new element primitives |
Suspense | ✅ | ✅ | schedule future render from future/promise |
Integrated error handling | ✅ | ✅ | Gracefully handle errors with ? syntax |
NodeRef | ✅ | ✅ | gain direct access to nodes |
Re-hydration | ✅ | ✅ | Pre-render to HTML to speed up first contentful paint |
Jank-Free Rendering | ✅ | ✅ | Large diffs are segmented across frames for silky-smooth transitions |
Cooperative Scheduling | ✅ | ✅ | Prioritize important events over non-important events |
Runs natively | ✅ | ❓ | runs as a portable binary w/o a runtime (Node) |
1st class global state | ✅ | ❓ | redux/recoil/mobx on top of context |
Subtree Memoization | ✅ | ❓ | skip diffing static element subtrees |
Compile-time correct | ✅ | ❓ | Throw errors on invalid template layouts |
Heuristic Engine | ✅ | ❓ | track component memory usage to minimize future allocations |
Fine-grained reactivity | 🛠 | ❓ | Skip diffing for fine-grain updates |
Effects | 🛠 | ✅ | Run effects after a component has been committed to render |
Feature | Dioxus | React | Notes for Dioxus |
---|---|---|---|
1st class router | 👀 | ✅ | Hook built on top of history |
Assets | 👀 | ✅ | include css/svg/img url statically |
Integrated classnames | 🛠 | ❓ | built-in classnames |
Transition | 👀 | 🛠 | High-level control over suspense |
Animation | 👀 | ✅ | Spring-style animations |
Native Mobile | 👀 | ✅ | Render with cacao |
Native Desktop | 👀 | ✅ | Render with native desktop |
3D Renderer | 👀 | ✅ | react-three-fiber |
Feature | Dioxus | React | Notes for Dioxus |
---|---|---|---|
Portal | ❓ | ✅ | cast elements through tree |
Error/Panic boundary | 👀 | ✅ | catch panics and display custom BSOD |
Code-splitting | 👀 | ✅ | Make bundle smaller/lazy |
LiveView | 👀 | ❓ | Example for SSR + WASM apps |