Add blog about react select
This commit is contained in:
BIN
blog_images/react-selected-option.jpg
Normal file
BIN
blog_images/react-selected-option.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 MiB |
61
blog_posts/react-selected-option.md
Normal file
61
blog_posts/react-selected-option.md
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
title: How can I set the value of a select input in React?
|
||||
type: question
|
||||
tags: react,components,input
|
||||
authors: maciv
|
||||
cover: blog_images/react-selected-option.jpg
|
||||
excerpt: Learn of all the different ways to set the value of a selected input in React with this quick guide.
|
||||
---
|
||||
|
||||
**Adding selected to an option**
|
||||
|
||||
A very common way of setting a `<select>` input's value is by adding a `selected` attribute to one of its `<option>` elements. For example:
|
||||
|
||||
```jsx
|
||||
const Select = ({ values, callback, selected }) => {
|
||||
return (
|
||||
<select
|
||||
disabled={disabled}
|
||||
readOnly={readonly}
|
||||
onChange={({ target: { value } }) => callback(value)}
|
||||
>
|
||||
{values.map(([value, text]) => (
|
||||
<option selected={selected === value} value={value}>
|
||||
{text}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
**Setting value for the select**
|
||||
|
||||
While this approach closely resembles HTML and feels intuitive, there is an easier way to do the same thing. [React](https://reactjs.org/docs/forms.html#the-select-tag) provides us with a shared API between `<input type="text">`, `<textarea>` and `<select>` where we can use `value` or `defaultValue` (depending if the input is controlled or not) to set the field's value.
|
||||
|
||||
Using this API, we minimize the effort of checking for the selected value, as well as making the code easier to read and update as necessary. Here's an example:
|
||||
|
||||
```jsx
|
||||
const Select = ({ values, callback, selected }) => {
|
||||
return (
|
||||
<select
|
||||
disabled={disabled}
|
||||
readOnly={readonly}
|
||||
defaultValue={selected}
|
||||
onChange={({ target: { value } }) => callback(value)}
|
||||
>
|
||||
{values.map(([value, text]) => (
|
||||
<option value={value}>
|
||||
{text}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
Note that the above implementation uses `defaultValue`, therefore it implies that the component is uncontrolled. You can convert this `Select` component into a controlled component by using `value` instead of `defaultValue`.
|
||||
|
||||
For a more detailed explanation of the component, as well as usage examples, you can check out the [Select component](/react/s/select).
|
||||
|
||||
**Image credit:** [Robert Anasch](https://unsplash.com/@diesektion?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/code?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
|
||||
Reference in New Issue
Block a user