Homeโ€บ๐ŸŽฎ Foundationsโ€บModule 21 min read ยท 3/15

First Blood (First App)

Hands-on2 exercises

Your First Page

The root component (App.tsx) sets up routing:

import { Page } from "@dynatrace/strato-components/layouts";
import { Route, Routes } from "react-router-dom";
import { Home } from "./pages/Home";

export const App = () => (
  <Page>
    <Page.Main>
      <Routes>
        <Route path="/" element={<Home />} />
      </Routes>
    </Page.Main>
  </Page>
);

Creating a Page

// ui/app/pages/HostList.tsx
import { Flex, TitleBar } from "@dynatrace/strato-components/layouts";
import { Text } from "@dynatrace/strato-components/typography";

export const HostList = () => (
  <Flex flexDirection="column" gap={16} padding={32}>
    <TitleBar>
      <TitleBar.Title>Host Monitor</TitleBar.Title>
    </TitleBar>
    <Text>Host data coming in Module 4.</Text>
  </Flex>
);

Key Strato Components

ComponentImport FromPurpose
Page, Page.Main, Page.HeaderlayoutsApp shell and structure
FlexlayoutsFlexbox layout (gap, padding, direction)
TitleBarlayoutsPage header with title/subtitle
AppHeader, NavItemlayoutsTop navigation bar
ButtonbuttonsActions and interactions
Text, HeadingtypographyText content
๐Ÿง  Quick Check

Which Strato component creates a flexbox layout with gap and padding?

Adding Navigation

import { AppHeader, NavItem } from "@dynatrace/strato-components/layouts";
import { Link } from "react-router-dom";

// In App.tsx, before Page.Main:
<Page.Header>
  <AppHeader>
    <NavItem component={Link} to="/">Home</NavItem>
    <NavItem component={Link} to="/hosts">Hosts</NavItem>
  </AppHeader>
</Page.Header>

๐Ÿ’ก Edit any file, save, browser refreshes instantly. No manual rebuild needed.

๐Ÿง  Quick CheckQuestion 2

How do you add navigation between pages in a Dynatrace App?

What's Next

Module 3 โ€” Load DOOM inside your app. CSP configuration, iframe sandbox, static assets.