Stepper
Stepper
is a component that displays the progress of a multi-step process.
Import
import {Stepper,Step,StepTitle,StepDescription,StepSeparator,StepStatus,useSteps,} from "@yamada-ui/react"
Stepper
: A wrapper component that controls child elements (Step
).Step
: A component that displays a single step.StepTitle
: A component that displays the title of a step.StepDescription
: A component that displays the description of a step.StepSeparator
: A component that displays the separator between steps.StepStatus
: A component that displays the indicator for a step.useSteps
: A custom hook that manages the state of each step and the active index.
Usage
Define the information for each step in an array called steps
, and set the initial index
and the number of items in the steps
array to useSteps
.
Pass the activeStep
returned from useSteps
and the previously defined array steps
to Stepper
.
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍" }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王" }, { title: "サイヤ人編", description: "ベジータ・ナッパ" }, ] const { activeStep, onStepNext, onStepPrev } = useSteps({ index: 1, count: steps.length, }) return ( <VStack> <Stepper index={activeStep} steps={steps} /> <HStack> <Button onClick={onStepPrev}>Prev</Button> <Button onClick={onStepNext}>Next</Button> </HStack> </VStack> )
Change Size
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍" }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王" }, { title: "サイヤ人編", description: "ベジータ・ナッパ" }, ] return ( <VStack> <Stepper size="sm" index={1} steps={steps} /> <Stepper size="md" index={1} steps={steps} /> <Stepper size="lg" index={1} steps={steps} /> </VStack> )
Change Color Scheme
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍" }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王" }, { title: "サイヤ人編", description: "ベジータ・ナッパ" }, ] return ( <VStack> <Stepper colorScheme="secondary" index={1} steps={steps} /> <Stepper colorScheme="green" index={1} steps={steps} /> </VStack> )
Change Orientation
By setting orientation
to horizontal
or vertical
, you can change the orientation of the stepper.
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍" }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王" }, { title: "サイヤ人編", description: "ベジータ・ナッパ" }, ] const { activeStep, onStepNext, onStepPrev } = useSteps({ index: 1, count: steps.length, }) return ( <VStack> <Stepper index={activeStep} steps={steps} orientation="horizontal" /> <Stepper index={activeStep} steps={steps} orientation="vertical" h="sm" /> <HStack> <Button onClick={onStepPrev}>Prev</Button> <Button onClick={onStepNext}>Next</Button> </HStack> </VStack> )
Customize Steps
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍" }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王" }, { title: "サイヤ人編", description: "ベジータ・ナッパ" }, ] const { activeStep, onStepNext, onStepPrev } = useSteps({ index: 1, count: steps.length, }) return ( <VStack> <Stepper index={activeStep}> {steps.map(({ title, description }, index) => ( <Step key={index}> <StepStatus /> <Box flexShrink="0"> <StepTitle>{title}</StepTitle> <StepDescription>{description}</StepDescription> </Box> <StepSeparator /> </Step> ))} </Stepper> <HStack> <Button onClick={onStepPrev}>Prev</Button> <Button onClick={onStepNext}>Next</Button> </HStack> </VStack> )
Customize Indicators
To customize the indicators for each step, set the values for each status to statusProps
or the StepStatus
component.
complete
: The indicator displayed for a completed step.active
: The indicator displayed for an active step.incomplete
: The indicator displayed for an incomplete step.
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍", statusProps: { complete: `😇`, incomplete: `😑`, active: `😎` }, }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王", statusProps: { complete: `😇`, incomplete: `😑`, active: `😎` }, }, { title: "サイヤ人編", description: "ベジータ・ナッパ", statusProps: { complete: `😇`, incomplete: `😑`, active: `😎` }, }, ] const { activeStep, onStepNext, onStepPrev } = useSteps({ index: 1, count: steps.length, }) return ( <VStack> <Stepper index={activeStep} steps={steps} /> <HStack> <Button onClick={onStepPrev}>Prev</Button> <Button onClick={onStepNext}>Next</Button> </HStack> </VStack> )
Editable example
const steps: Steps = [ { title: "孫悟空少年編", description: "レッドリボン軍", }, { title: "ピッコロ大魔王編", description: "ピッコロ大魔王", }, { title: "サイヤ人編", description: "ベジータ・ナッパ", }, ] const { activeStep, onStepNext, onStepPrev } = useSteps({ index: 1, count: steps.length, }) return ( <VStack> <Stepper index={activeStep}> {steps.map(({ title, description }, index) => ( <Step key={index}> <StepStatus complete={<GhostIcon />} /> <Box flexShrink="0"> <StepTitle>{title}</StepTitle> <StepDescription>{description}</StepDescription> </Box> <StepSeparator /> </Step> ))} </Stepper> <HStack> <Button onClick={onStepPrev}>Prev</Button> <Button onClick={onStepNext}>Next</Button> </HStack> </VStack> )
Edit this page on GitHub