You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							169 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							169 lines
						
					
					
						
							6.5 KiB
						
					
					
				| [](https://www.npmjs.com/package/react-select)
 | |
| [](https://circleci.com/gh/JedWatson/react-select/tree/master)
 | |
| [](https://coveralls.io/github/JedWatson/react-select?branch=master)
 | |
| [](http://thinkmill.com.au/?utm_source=github&utm_medium=badge&utm_campaign=react-select)
 | |
| 
 | |
| # React-Select
 | |
| 
 | |
| The Select control for [React](https://reactjs.com). Initially built for use in [KeystoneJS](http://www.keystonejs.com).
 | |
| 
 | |
| See [react-select.com](https://www.react-select.com) for live demos and comprehensive docs.
 | |
| 
 | |
| React Select is funded by [Thinkmill](https://www.thinkmill.com.au) and [Atlassian](https://atlaskit.atlassian.com). It represents a whole new approach to developing powerful React.js components that _just work_ out of the box, while being extremely customisable.
 | |
| 
 | |
| For the story behind this component, watch Jed's talk at React Conf 2019 - [building React Select](https://youtu.be/yS0jUnmBujE)
 | |
| 
 | |
| Features include:
 | |
| 
 | |
| - Flexible approach to data, with customisable functions
 | |
| - Extensible styling API with [emotion](https://emotion.sh)
 | |
| - Component Injection API for complete control over the UI behaviour
 | |
| - Controllable state props and modular architecture
 | |
| - Long-requested features like option groups, portal support, animation, and more
 | |
| 
 | |
| ## Using an older version?
 | |
| 
 | |
| - [v3, v4, and v5 upgrade guide](https://react-select.com/upgrade)
 | |
| - [v2 upgrade guide](https://react-select.com/upgrade-to-v2)
 | |
| - React Select v1 documentation and examples are available at [v1.react-select.com](https://v1.react-select.com)
 | |
| 
 | |
| # Installation and usage
 | |
| 
 | |
| The easiest way to use react-select is to install it from npm and build it into your app with Webpack.
 | |
| 
 | |
| ```
 | |
| yarn add react-select
 | |
| ```
 | |
| 
 | |
| Then use it in your app:
 | |
| 
 | |
| #### With React Component
 | |
| 
 | |
| ```js
 | |
| import React from 'react';
 | |
| import Select from 'react-select';
 | |
| 
 | |
| const options = [
 | |
|   { value: 'chocolate', label: 'Chocolate' },
 | |
|   { value: 'strawberry', label: 'Strawberry' },
 | |
|   { value: 'vanilla', label: 'Vanilla' },
 | |
| ];
 | |
| 
 | |
| class App extends React.Component {
 | |
|   state = {
 | |
|     selectedOption: null,
 | |
|   };
 | |
|   handleChange = (selectedOption) => {
 | |
|     this.setState({ selectedOption }, () =>
 | |
|       console.log(`Option selected:`, this.state.selectedOption)
 | |
|     );
 | |
|   };
 | |
|   render() {
 | |
|     const { selectedOption } = this.state;
 | |
| 
 | |
|     return (
 | |
|       <Select
 | |
|         value={selectedOption}
 | |
|         onChange={this.handleChange}
 | |
|         options={options}
 | |
|       />
 | |
|     );
 | |
|   }
 | |
| }
 | |
| ```
 | |
| 
 | |
| #### With React Hooks
 | |
| 
 | |
| ```js
 | |
| import React, { useState } from 'react';
 | |
| import Select from 'react-select';
 | |
| 
 | |
| const options = [
 | |
|   { value: 'chocolate', label: 'Chocolate' },
 | |
|   { value: 'strawberry', label: 'Strawberry' },
 | |
|   { value: 'vanilla', label: 'Vanilla' },
 | |
| ];
 | |
| 
 | |
| export default function App() {
 | |
|   const [selectedOption, setSelectedOption] = useState(null);
 | |
| 
 | |
|   return (
 | |
|     <div className="App">
 | |
|       <Select
 | |
|         defaultValue={selectedOption}
 | |
|         onChange={setSelectedOption}
 | |
|         options={options}
 | |
|       />
 | |
|     </div>
 | |
|   );
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Props
 | |
| 
 | |
| Common props you may want to specify include:
 | |
| 
 | |
| - `autoFocus` - focus the control when it mounts
 | |
| - `className` - apply a className to the control
 | |
| - `classNamePrefix` - apply classNames to inner elements with the given prefix
 | |
| - `isDisabled` - disable the control
 | |
| - `isMulti` - allow the user to select multiple values
 | |
| - `isSearchable` - allow the user to search for matching options
 | |
| - `name` - generate an HTML input with this name, containing the current value
 | |
| - `onChange` - subscribe to change events
 | |
| - `options` - specify the options the user can select from
 | |
| - `placeholder` - change the text displayed when no option is selected
 | |
| - `noOptionsMessage` - ({ inputValue: string }) => string | null - Text to display when there are no options
 | |
| - `value` - control the current value
 | |
| 
 | |
| See the [props documentation](https://www.react-select.com/props) for complete documentation on the props react-select supports.
 | |
| 
 | |
| ## Controllable Props
 | |
| 
 | |
| You can control the following props by providing values for them. If you don't, react-select will manage them for you.
 | |
| 
 | |
| - `value` / `onChange` - specify the current value of the control
 | |
| - `menuIsOpen` / `onMenuOpen` / `onMenuClose` - control whether the menu is open
 | |
| - `inputValue` / `onInputChange` - control the value of the search input (changing this will update the available options)
 | |
| 
 | |
| If you don't provide these props, you can set the initial value of the state they control:
 | |
| 
 | |
| - `defaultValue` - set the initial value of the control
 | |
| - `defaultMenuIsOpen` - set the initial open value of the menu
 | |
| - `defaultInputValue` - set the initial value of the search input
 | |
| 
 | |
| ## Methods
 | |
| 
 | |
| React-select exposes two public methods:
 | |
| 
 | |
| - `focus()` - focus the control programmatically
 | |
| - `blur()` - blur the control programmatically
 | |
| 
 | |
| ## Customisation
 | |
| 
 | |
| Check the docs for more information on:
 | |
| 
 | |
| - [Customising the styles](https://www.react-select.com/styles)
 | |
| - [Using custom components](https://www.react-select.com/components)
 | |
| - [Using the built-in animated components](https://www.react-select.com/home#animated-components)
 | |
| - [Creating an async select](https://www.react-select.com/async)
 | |
| - [Allowing users to create new options](https://www.react-select.com/creatable)
 | |
| - [Advanced use-cases](https://www.react-select.com/advanced)
 | |
| - [TypeScript guide](https://www.react-select.com/typescript)
 | |
| 
 | |
| ## TypeScript
 | |
| 
 | |
| The v5 release represents a rewrite from JavaScript to TypeScript. The types for v4 and earlier releases are available at [@types](https://www.npmjs.com/package/@types/react-select). See the [TypeScript guide](https://www.react-select.com/typescript) for how to use the types starting with v5.
 | |
| 
 | |
| # Thanks
 | |
| 
 | |
| Thank you to everyone who has contributed to this project. It's been a wild ride.
 | |
| 
 | |
| If you like React Select, you should [follow me on twitter](https://twitter.com/jedwatson)!
 | |
| 
 | |
| Shout out to [Joss Mackison](https://github.com/jossmac), [Charles Lee](https://github.com/gwyneplaine), [Ben Conolly](https://github.com/Noviny), [Tom Walker](https://github.com/bladey), [Nathan Bierema](https://github.com/Methuselah96), [Eric Bonow](https://github.com/ebonow), [Mitchell Hamilton](https://github.com/mitchellhamilton), [Dave Brotherstone](https://github.com/bruderstein), [Brian Vaughn](https://github.com/bvaughn), and the [Atlassian Design System](https://atlassian.design) team who along with many other contributors have made this possible ❤️
 | |
| 
 | |
| ## License
 | |
| 
 | |
| MIT Licensed. Copyright (c) Jed Watson 2022.
 |