Skip to content

Layout

By default, Reactlit uses a simple flat layout system where each display call concatenates a ReactNode to the DOM. This works great for simple applications, where you are ok just showing your content in a single column, but as your application grows, you may want to have more control over the layout.

The built-in layout view lets you define more custom layouts with your Reactlit script.

The layout view works via a modified version of the tunnel-rat library. It takes a number of slots to expose and a render function that defines how those slots are layed out. Then, for each slot, it returns a mini-context with view and display functions that render specifically within that slot.

This is a bit abstract, so let’s look at an example.

layout-example.tsx
import { LayoutView, useReactlit } from '@reactlit/core';
import { TextInput } from './inputs/basic-text-input';
export default function LayoutExample() {
const Reactlit = useReactlit();
return (
<Reactlit>
{async ({ view }) => {
const [col1, col2, col3] = view(
'cols',
<div
style={{
display: 'grid',
gridTemplateColumns: '1fr 1fr 1fr',
gap: '1rem',
alignItems: 'end',
}}
/>,
// the second argument here wraps each slot in a div so that they show
// up as a single grid column in the layout
LayoutView(3, <div />)
);
col1.display('First Name');
const first = col1.view('first', TextInput);
col2.display('Last Name');
const last = col2.view('last', TextInput);
col3.display('Hello to');
col3.display(
<div>
{first} {last}
</div>
);
}}
</Reactlit>
);
}