1
votes

Reactjs - Présélection des options avec react-select

J'utilise la case de sélection de réaction-sélection pour permettre à l'utilisateur de sélectionner plusieurs options dans un menu déroulant. Je me demandais s'il était possible de présélectionner quelques options (la boîte de sélection est déjà remplie). J'ai créé un bac à sable pour le projet:

https://codesandbox.io/s / blissful-almeida-4iux6

Ceci est le tableau de bord qui appelle la SelectBox, dans l'état où j'ai les "preselectedOptions" qui sont les options que je voudrais déjà sélectionnées. Dans cet exemple, je voudrais avoir "Option 1" et "Option 3" déjà sélectionnées:

import React, { Component } from "react";
import Select from "react-select";

class SelectBox extends Component {
  constructor(props) {
    super(props);
    this.customStyles = {
      input: styles => {
        return {
          ...styles,
          height: "45px"
        };
      }
    };
    this.handleChange = this.handleChange.bind(this);
    this.options = [];

    this.options.push({ value: "Option 1", label: "Option 1" });
    this.options.push({ value: "Option 2", label: "Option 2" });
    this.options.push({ value: "Option 3", label: "Option 3" });
    this.options.push({ value: "Option 4", label: "Option 4" });
    this.options.push({ value: "Option 5", label: "Option 5" });
  }

  handleChange(e) {
    this.props.selectedOptions(e);
  }

  render() {
    return (
      <div>
        <Select
          isMulti
          maxMenuHeight="150px"
          styles={this.customStyles}
          options={this.options}
          onChange={this.handleChange}
          className="basic-multi-select"
          classNamePrefix="select"
        />
      </div>
    );
  }
}

export default SelectBox;

Et voici la SelectBox:

import React, { Component } from "react";
import SelectBox from "./dropdown";

class Dashboard extends Component {
  constructor() {
    super();
    this.state = {
      currentOptions: [],
      preselectedOptions: ["Option 1", "Option 3"]
    };
  }

  updateOptions(selected) {
    this.setState({
      currentOptions: selected
    });
  }

  showSelected() {
    alert(this.state.currentOptions.length + " selected");
  }

  render() {
    return (
      <div>
        <SelectBox selectedOptions={this.updateOptions.bind(this)} />
        <br />

        <button onClick={() => this.showSelected()}>Selected</button>
      </div>
    );
  }
}

export default Dashboard;


0 commentaires

3 Réponses :


1
votes

Vous pouvez le faire via la defaultValue prop .

Par exemple, pour avoir Option 1 et Option 2 présélectionnées, vous passeriez les deux dans un tableau via defaultValue comme ça:

{/* Pass array of preselected options to defaultValue */}
<Select
      isMulti
      defaultValue={[this.options[0], this.options[1]]}
      maxMenuHeight="150px"
      styles={this.customStyles}
      options={this.options}
      onChange={this.handleChange}
      className="basic-multi-select"
      classNamePrefix="select"
    />


0 commentaires

2
votes

utilisez les preselectedOptions comme defaultProps dans les accessoires de sélection


0 commentaires

1
votes

Vous devriez jeter un œil à la prop defaultValue .

<Select
  isMulti
  maxMenuHeight="150px"
  styles={this.customStyles}
  options={this.options}
  defaultValue={[this.options[0], this.options[2]]}
  onChange={this.handleChange}
  className="basic-multi-select"
  classNamePrefix="select"
/>

Voici un lien vers un bac à sable modifié: https://codesandbox.io/s/unruffled-goldberg-lpr6w?fontsize=14

Bonne chance!


1 commentaires

Pas de problème. Félicitations à @ dacre-denny qui a livré la même réponse quelques minutes plus vite que moi.