Skip to main content
react-md

Form Message

The FormMessage component is used to display additional help text or error messages and generally placed below the related form component.

Simple Form Message

Here is some help text

Help text with a counter

30 / 40

Here is some error text

import { Box } from "@react-md/core/box/Box";
import { FormMessage } from "@react-md/core/form/FormMessage";
import { type ReactElement } from "react";

export default function SimpleFormMessage(): ReactElement {
  return (
    <Box stacked align="start">
      <FormMessage>Here is some help text</FormMessage>
      <FormMessage length={30} maxLength={40}>
        Help text with a counter
      </FormMessage>
      <FormMessage error>Here is some error text</FormMessage>
    </Box>
  );
}

Press Enter to start editing.

Form Level Validation Message

This component can be used to create a form-level validation message when submitting instead of needing to display error messages with each form field.

"use client";

import { Box } from "@react-md/core/box/Box";
import { box } from "@react-md/core/box/styles";
import { Button } from "@react-md/core/button/Button";
import { Form } from "@react-md/core/form/Form";
import { FormMessage } from "@react-md/core/form/FormMessage";
import { Radio } from "@react-md/core/form/Radio";
import { useRadioGroup } from "@react-md/core/form/useRadioGroup";
import { type ReactElement, useState } from "react";

export default function FormLevelValidationMessage(): ReactElement {
  const [error, setError] = useState(false);
  const { getRadioProps, reset } = useRadioGroup({
    name: "choices",
    required: true,
    onInvalid: () => {
      setError(true);
    },
    onChange: () => {
      setError(false);
    },
  });

  return (
    <Form
      name="validation"
      className={box({ stacked: true, align: "stretch" })}
      onReset={() => {
        reset();
        setError(false);
      }}
    >
      <FormMessage role="alert" error>
        {error && "Please fill in the required fields."}
      </FormMessage>
      <Radio {...getRadioProps("a")} label="First" />
      <Radio {...getRadioProps("b")} label="Second" />
      <Radio {...getRadioProps("c")} label="Third" />
      <Radio {...getRadioProps("d")} label="Forth" />
      <Box disablePadding justify="space-between">
        <Button type="reset" theme="warning" themeType="outline">
          Reset
        </Button>
        <Button type="submit" theme="primary" themeType="contained">
          Submit
        </Button>
      </Box>
    </Form>
  );
}

Press Enter to start editing.

Form Message Container

The FormMessageContainer is a simple wrapper used to conditionally render the FormMessage along with any children if messageProps exist.

Every form component in react-md uses this component behind the scenes already. In addition, the useTextField and useNumberField hooks will dynamically provide these props.

No message
Has message

Some additional help text.

import { Box } from "@react-md/core/box/Box";
import { FormMessageContainer } from "@react-md/core/form/FormMessageContainer";
import { type ReactElement } from "react";

export default function SimpleFormMessageContainer(): ReactElement {
  return (
    <Box justify="start" stacked>
      <FormMessageContainer>No message</FormMessageContainer>
      <FormMessageContainer
        messageProps={{
          children: "Some additional help text.",
        }}
      >
        Has message
      </FormMessageContainer>
    </Box>
  );
}

Press Enter to start editing.