12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- use crate::{contexts::outlet::OutletContext, routable::Routable};
- use dioxus::prelude::*;
- /// An outlet for the current content.
- ///
- /// Only works as descendant of a [`GenericRouter`] component, otherwise it will be inactive.
- ///
- /// The [`Outlet`] is aware of how many [`Outlet`]s it is nested within. It will render the content
- /// of the active route that is __exactly as deep__.
- ///
- /// # Panic
- /// - When the [`Outlet`] is not nested within another component calling the [`use_router`] hook,
- /// but only in debug builds.
- ///
- /// # Example
- /// ```rust
- /// # use dioxus::prelude::*;
- /// # use serde::{Deserialize, Serialize};
- /// # use dioxus_router::prelude::*;
- /// #[derive(Clone, Serialize, Deserialize, Routable)]
- /// #[rustfmt::skip]
- /// enum Route {
- /// #[nest("/wrap")]
- /// #[layout(Wrapper)] // Every layout component must have one Outlet
- /// #[route("/")]
- /// Child {},
- /// #[end_layout]
- /// #[end_nest]
- /// #[route("/")]
- /// Index {},
- /// }
- ///
- /// #[inline_props]
- /// fn Index(cx: Scope) -> Element {
- /// render! {
- /// div {
- /// "Index"
- /// }
- /// }
- /// }
- ///
- /// #[inline_props]
- /// fn Wrapper(cx: Scope) -> Element {
- /// render! {
- /// h1 { "App" }
- /// Outlet {} // The content of child routes will be rendered here
- /// }
- /// }
- ///
- /// #[inline_props]
- /// fn Child(cx: Scope) -> Element {
- /// render! {
- /// p {
- /// "Child"
- /// }
- /// }
- /// }
- ///
- /// # fn App(cx: Scope) -> Element {
- /// # render! {
- /// # Router {
- /// # config: RouterConfiguration {
- /// # history: Box::new(MemoryHistory::with_initial_path("/wrap").unwrap()),
- /// # ..Default::default()
- /// # }
- /// # }
- /// # }
- /// # }
- /// #
- /// # let mut vdom = VirtualDom::new(App);
- /// # let _ = vdom.rebuild();
- /// # assert_eq!(dioxus_ssr::render(&vdom), "<h1>App</h1><p>Child</p>");
- /// ```
- pub fn GenericOutlet<R: Routable + Clone>(cx: Scope) -> Element {
- OutletContext::render::<R>(cx)
- }
|