Struct leptos::ErrorBoundaryProps
source · pub struct ErrorBoundaryProps<F, IV>{
pub children: Children,
pub fallback: F,
}
Expand description
Props for the ErrorBoundary
component.
When you render a Result<_, _>
in your view, in the Err
case it will
render nothing, and search up through the view tree for an <ErrorBoundary/>
.
This component lets you define a fallback that should be rendered in that
error case, allowing you to handle errors within a section of the interface.
let (value, set_value) = create_signal(Ok(0));
let on_input =
move |ev| set_value.set(event_target_value(&ev).parse::<i32>());
view! {
<input type="text" on:input=on_input/>
<ErrorBoundary
fallback=move |_| view! { <p class="error">"Enter a valid number."</p>}
>
<p>"Value is: " {move || value.get()}</p>
</ErrorBoundary>
}
§Interaction with <Suspense/>
If you use this with a <Suspense/>
or <Transition/>
component, note that the
<ErrorBoundary/>
should go inside the <Suspense/>
, not the other way around,
if there’s a chance that the <ErrorBoundary/>
will begin in the error state.
This is a limitation of the current design of the two components and the way they
hydrate. Placing the <ErrorBoundary/>
outside the <Suspense/>
means that
it is rendered on the server without any knowledge of the suspended view, so it
will always be rendered on the server as if there were no errors, but might need
to be hydrated with errors, depending on the actual result.
view! {
<Suspense fallback=move || view! { <p>"Loading..."</p> }>
<ErrorBoundary fallback=|errors| view! { <ErrorTemplate errors=errors/>}>
{move || {
/* etc. */
§Beginner’s Tip: ErrorBoundary Requires Your Error To Implement std::error::Error.
ErrorBoundary
requires your Result<T,E>
to implement IntoView.
Result<T,E>
only implements IntoView
if E
implements std::error::Error.
So, for instance, if you pass a Result<T,String>
where T
implements IntoView
and attempt to render the error for the purposes of ErrorBoundary
you’ll get a compiler error like this.
error[E0599]: the method `into_view` exists for enum `Result<ViewableLoginFlow, String>`, but its trait bounds were not satisfied
--> src/login.rs:229:32
|
229 | err => err.into_view(),
| ^^^^^^^^^ method cannot be called on `Result<ViewableLoginFlow, String>` due to unsatisfied trait bounds
|
= note: the following trait bounds were not satisfied:
`<&Result<ViewableLoginFlow, std::string::String> as FnOnce<()>>::Output = _`
which is required by `&Result<ViewableLoginFlow, std::string::String>: leptos::IntoView`
... more notes here ...
For more information about how to easily implement Error
see
thiserror
§Required Props
- children:
Children
- The components inside the tag which will get rendered
- fallback: [
F
]- A fallback that will be shown if an error occurs.
Fields§
§children: Children
The components inside the tag which will get rendered
fallback: F
A fallback that will be shown if an error occurs.
Implementations§
source§impl<F, IV> ErrorBoundaryProps<F, IV>
impl<F, IV> ErrorBoundaryProps<F, IV>
Trait Implementations§
Auto Trait Implementations§
impl<F, IV> Freeze for ErrorBoundaryProps<F, IV>where
F: Freeze,
impl<F, IV> !RefUnwindSafe for ErrorBoundaryProps<F, IV>
impl<F, IV> !Send for ErrorBoundaryProps<F, IV>
impl<F, IV> !Sync for ErrorBoundaryProps<F, IV>
impl<F, IV> Unpin for ErrorBoundaryProps<F, IV>where
F: Unpin,
impl<F, IV> !UnwindSafe for ErrorBoundaryProps<F, IV>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more