React Segmented Controls

2.7.1 · active · verified Tue Apr 21

rc-segmented is a foundational React component for building highly customizable segmented controls, extensively utilized within the Ant Design ecosystem. It presents choices as a group of buttons where typically only one can be active at a time, akin to a radio group. The component supports various data types for options (strings, numbers, or objects), robust `onChange` event handling, and manages selection state. Currently stable at version `2.7.1`, the package maintains a moderate release cadence, focusing on bug fixes, performance enhancements, and crucial accessibility improvements. While `rc-segmented` is the primary package, a newer scoped version, `@rc-component/segmented`, sometimes receives parallel updates, which can be a point of confusion for developers. Key differentiators include its deep integration with Ant Design's principles, a strong emphasis on accessibility, and a clear, functional API for managing segmented choices efficiently within React applications.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates a basic segmented control with state management, custom options, and event handling using modern React hooks and `createRoot`.

import Segmented from 'rc-segmented';
import 'rc-segmented/assets/index.css';
import React, { useState } from 'react';
import { createRoot } from 'react-dom/client';

const App = () => {
  const [value, setValue] = useState('Antd');

  const handleValueChange = (newValue: string | number) => {
    console.log('Selected value:', newValue);
    setValue(newValue);
  };

  return (
    <div style={{ padding: '20px' }}>
      <h1>rc-segmented Demo</h1>
      <Segmented
        options={['Antd', 'Antv', 'Egg.js', { label: 'Pro', value: 'Pro', disabled: true } ]}
        value={value}
        onChange={handleValueChange}
      />
      <p>Currently selected: {value}</p>
    </div>
  );
};

const mountNode = document.getElementById('root');
if (mountNode) {
  const root = createRoot(mountNode);
  root.render(<App />);
} else {
  console.error("Mount node with ID 'root' not found. Please ensure an element with id='root' exists in your HTML.");
}

view raw JSON →