See also:
Quaject
Articles
Topics
How-tos
Code snippet

<select> in React

Anton Vasetenkov
Web, data, bio, language.
React
HTML

This is an example of a controlled <select> implementation in React using the JSX syntax:

import React from 'react';

type Value = any

type SelectProps = {
    options: {
        label: string
        value: Value
    }[]
    value: Value
    onChange: (value: Value) => void
}

const Select = ({ options, value, onChange }: SelectProps) => (
    <select
        onChange={(event: React.ChangeEvent<HTMLSelectElement>) => {
            const selectedIndex = event.target.selectedIndex
            onChange(options[selectedIndex].value)
        }}
        value={value}
    >
        {options.map(({ label, value }) => (
            <option key={value} value={value}>{label}</option>
        ))}
    </select>
)

If the Value type is string, the onChange prop passed to <select> can be simplified:

type SelectProps = {
    options: {
        label: string
        value: string
    }[]
    value: string
    onChange: (value: string) => void
}

const Select = ({ options, value, onChange }: SelectProps) => (
    <select
        onChange={(event: React.ChangeEvent<HTMLSelectElement>) => onChange(event.target.value)}
        value={value}
    >
        {options.map(({ label, value }) => (
            <option key={value} value={value}>{label}</option>
        ))}
    </select>
)
See also