Struct leptos::ErrorBoundaryProps

source ·
pub struct ErrorBoundaryProps<F, IV>
where F: Fn(RwSignal<Errors>) -> IV + 'static, IV: IntoView,
{ 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>
where F: Fn(RwSignal<Errors>) -> IV + 'static, IV: IntoView,

source

pub fn builder() -> ErrorBoundaryPropsBuilder<F, IV, ((), ())>

Create a builder for building ErrorBoundaryProps. On the builder, call .children(...), .fallback(...) to set the values of the fields. Finally, call .build() to create the instance of ErrorBoundaryProps.

Trait Implementations§

source§

impl<F, IV> IntoView for ErrorBoundaryProps<F, IV>
where F: Fn(RwSignal<Errors>) -> IV + 'static, IV: IntoView,

source§

fn into_view(self) -> View

Converts the value into View.

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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more