mirror of
https://github.com/leptos-rs/leptos
synced 2024-11-10 06:44:17 +00:00
Basic error boundary example
This commit is contained in:
parent
7c25f59a68
commit
73420affed
7 changed files with 94 additions and 0 deletions
10
examples/error_boundary/Cargo.toml
Normal file
10
examples/error_boundary/Cargo.toml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "error_boundary"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
leptos = { path = "../../leptos" }
|
||||||
|
console_log = "0.2"
|
||||||
|
log = "0.4"
|
||||||
|
console_error_panic_hook = "0.1.7"
|
9
examples/error_boundary/Makefile.toml
Normal file
9
examples/error_boundary/Makefile.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[tasks.build]
|
||||||
|
command = "cargo"
|
||||||
|
args = ["+nightly", "build-all-features"]
|
||||||
|
install_crate = "cargo-all-features"
|
||||||
|
|
||||||
|
[tasks.check]
|
||||||
|
command = "cargo"
|
||||||
|
args = ["+nightly", "check-all-features"]
|
||||||
|
install_crate = "cargo-all-features"
|
7
examples/error_boundary/README.md
Normal file
7
examples/error_boundary/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Leptos `<ErrorBoundary/>` Example
|
||||||
|
|
||||||
|
This example shows how to handle basic errors using Leptos.
|
||||||
|
|
||||||
|
To run it, just issue the `trunk serve --open` command in the example root. This will build the app, run it, and open a new browser to serve it.
|
||||||
|
|
||||||
|
> If you don't have `trunk` installed, [click here for install instructions.](https://trunkrs.dev/)
|
8
examples/error_boundary/index.html
Normal file
8
examples/error_boundary/index.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link data-trunk rel="rust" data-wasm-opt="z"/>
|
||||||
|
<link data-trunk rel="icon" type="image/ico" href="/public/favicon.ico"/>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
BIN
examples/error_boundary/public/favicon.ico
Normal file
BIN
examples/error_boundary/public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
48
examples/error_boundary/src/lib.rs
Normal file
48
examples/error_boundary/src/lib.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
use leptos::*;
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
pub fn App(cx: Scope) -> impl IntoView {
|
||||||
|
let (value, set_value) = create_signal(cx, Ok(0));
|
||||||
|
|
||||||
|
// when input changes, try to parse a number from the input
|
||||||
|
let on_input = move |ev| set_value(event_target_value(&ev).parse::<i32>());
|
||||||
|
|
||||||
|
view! { cx,
|
||||||
|
<h1>"Error Handling"</h1>
|
||||||
|
<label>
|
||||||
|
"Type a number (or something that's not a number!)"
|
||||||
|
<input type="number" on:input=on_input/>
|
||||||
|
// If an `Err(_) had been rendered inside the <ErrorBoundary/>,
|
||||||
|
// the fallback will be displayed. Otherwise, the children of the
|
||||||
|
// <ErrorBoundary/> will be displayed.
|
||||||
|
<ErrorBoundary
|
||||||
|
// the fallback receives a signal containing current errors
|
||||||
|
fallback=|cx, errors| view! { cx,
|
||||||
|
<div class="error">
|
||||||
|
<p>"Not a number! Errors: "</p>
|
||||||
|
// we can render a list of errors
|
||||||
|
// as strings, if we'd like
|
||||||
|
<ul>
|
||||||
|
{move || errors.get()
|
||||||
|
.0
|
||||||
|
.into_iter()
|
||||||
|
.map(|(_, e)| view! { cx, <li>{e.to_string()}</li>})
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
"You entered "
|
||||||
|
// because `value` is `Result<i32, _>`,
|
||||||
|
// it will render the `i32` if it is `Ok`,
|
||||||
|
// and render nothing and trigger the error boundary
|
||||||
|
// if it is `Err`. It's a signal, so this will dynamically
|
||||||
|
// update when `value` changes
|
||||||
|
<strong>{value}</strong>
|
||||||
|
</p>
|
||||||
|
</ErrorBoundary>
|
||||||
|
</label>
|
||||||
|
}
|
||||||
|
}
|
12
examples/error_boundary/src/main.rs
Normal file
12
examples/error_boundary/src/main.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
use error_boundary::*;
|
||||||
|
use leptos::*;
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
_ = console_log::init_with_level(log::Level::Debug);
|
||||||
|
console_error_panic_hook::set_once();
|
||||||
|
mount_to_body(|cx| {
|
||||||
|
view! { cx,
|
||||||
|
<App/>
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in a new issue