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;
3 Réponses :
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" />
utilisez les preselectedOptions
comme defaultProps
dans les accessoires de sélection
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!
Pas de problème. Félicitations à @ dacre-denny qui a livré la même réponse quelques minutes plus vite que moi.