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
			| 
											3 years ago
										 | [](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. |