← Back to JedWatson/react-select

How to Deploy & Use JedWatson/react-select

React-Select Deployment and Usage Guide

Prerequisites

  • Node.js (v12.0.0 or higher)
  • npm or yarn package manager
  • React (v16.8.0 or higher for hooks support)
  • Basic understanding of React and ES6+ JavaScript/TypeScript

Installation

For Using in Your Application

  1. Install react-select from npm:
npm install react-select

or

yarn add react-select
  1. Import and use in your React application:
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>
  );
}

For Development (Contributing)

  1. Clone the repository:
git clone https://github.com/JedWatson/react-select.git
cd react-select
  1. Install dependencies:
npm install
  1. Bootstrap the monorepo:
npm run bootstrap

Configuration

Environment Variables

React-Select doesn't require any specific environment variables for basic usage.

TypeScript Configuration

If using TypeScript, ensure your tsconfig.json includes:

{
  "compilerOptions": {
    "lib": ["dom", "dom.iterable", "es6"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": ["src"]
}

Build & Run

For Development

  1. Start the development server:
npm run storybook

This will launch Storybook at http://localhost:6006 where you can see and interact with various examples.

  1. Run tests:
npm test

For Production

React-Select is a component library, not an application. To use it in your production React app:

  1. Build your React application as usual (using your preferred build tool like Vite, Create React App, Next.js, etc.)

  2. The react-select component will be bundled with your application automatically when imported.

Deployment

Since React-Select is a component library, deployment considerations depend on how you're using it:

For Using in Your Application

Deploy your React application to any hosting platform:

  • Vercel (recommended for Next.js apps)
  • Netlify (recommended for static sites)
  • AWS Amplify
  • Firebase Hosting
  • GitHub Pages

For Contributing/Development

If you're contributing to react-select itself:

  1. Ensure all tests pass: npm test
  2. Build the packages: npm run build
  3. Submit a pull request to the main repository

Troubleshooting

Common Issues and Solutions

1. "Module not found: react-select"

  • Ensure you've installed the package: npm install react-select
  • Check your import statement: import Select from 'react-select'

2. TypeScript errors with v5

  • React-Select v5 is rewritten in TypeScript. If you're upgrading from v4:
    • Install the types package: npm install @types/react-select
    • Follow the TypeScript guide

3. Styling issues

  • React-Select uses emotion for styling. Ensure emotion is installed:
    npm install @emotion/react @emotion/styled
    
  • For custom styling, refer to the styles documentation

4. Performance issues with large option lists

  • Use the filterOption prop to customize filtering
  • Consider using the async select variant for large datasets
  • Implement virtualization for extremely large lists

5. Accessibility concerns

  • React-Select includes built-in accessibility features
  • For custom components, ensure you maintain proper ARIA attributes
  • Test with screen readers to verify accessibility

6. Controlled vs Uncontrolled component issues

  • If using controlled props (value, menuIsOpen, inputValue), ensure you provide corresponding change handlers
  • For uncontrolled usage, use defaultValue instead of value

7. Option rendering issues

  • Ensure your options array is properly formatted with value and label properties
  • For complex objects, use the getOptionValue and getOptionLabel props

8. Multi-select value management

  • When using isMulti, ensure you're handling arrays of values
  • Use the formatCreateLabel prop for custom "create new option" text

For more detailed troubleshooting and advanced use cases, visit the React-Select documentation.