Sonjoy Datta
Sonjoy Datta

Reputation: 1388

react-select: How do I resolve “Warning: Prop `id` did not match”

I have a web app with ReactJs and NextJs. In a functional component, I have used react-select then, I'm receiving the following console warning:

Warning: Prop id did not match. Server: "react-select-7-input" Client: "react-select-2-input"

My code is the following:

import { Row, Col, Card, Form, Button } from 'react-bootstrap';
import Select from 'react-select';

const priorityOptions = [
  { value: 'p1', label: 'Top level - P1' },
  { value: 'p2', label: 'Mid level - P2' },
  { value: 'p3', label: 'Low level - P3' }
];
const PostView = () => {
  return (
    <div className="DashboardSla-ContentBody__Form">
      <Row>
        <Col md="10">
          <Card className="shadow-sm">
            <Card.Body>
              <Form>
                <h5 className="text-secondary mb-3">Booking details</h5>
                <Form.Group controlId="postType">
                  <Form.Label>Booking priority</Form.Label>
                  <Select 
                    id="postType"
                    placeholder="Make a selection"
                    options={priorityOptions}
                  />
                </Form.Group>
                <Button
                  type="submit"
                  variant="primary"
                >Add Booking</Button>
              </Form>
            </Card.Body>
          </Card>
        </Col>
      </Row>
    </div>
  )
}

export default PostView;

Upvotes: 101

Views: 35487

Answers (5)

yuvraj sune
yuvraj sune

Reputation: 311

Instanceid should be any string in react select props it will definitely work...

instanceId = "select-box"

Upvotes: 1

Luke Taylor
Luke Taylor

Reputation: 9561

React 18 introduces a useId hook for generating an ID that is hydration-safe (stable across client and server renders) but still globally unique. You can use it to solve this problem. I use the following component in place of Select:

import React, { useId } from 'react';
import Select from 'react-select';

export default function StableSelect({ ...props }) {
  return <Select {...props} instanceId={useId()} />;
}

You can use this component exactly like Select, but it won’t raise any hydration errors since its ID is stable.

Upvotes: 41

wap institute
wap institute

Reputation: 9

<Select
  className={className}
  name={field.name}
  id="long-value-select"
  instanceId="long-value-select"
  value={getValue()}
  onChange={onChange}
  placeholder={placeholder}
  options={options}
  isMulti={isMulti}
/>

Upvotes: 0

Smit Desai
Smit Desai

Reputation: 211

Select component needs an instanceId, id mandatory So Just add

id="long-value-select" instanceId="long-value-select"

to your Select component it will remove the Warning :)

Upvotes: 20

xargr
xargr

Reputation: 3088

try to add prop instanceId set as unique string and should work

Upvotes: 166

Related Questions