Ich habe Probleme beim Deaktivieren bestimmter Optionen in einer großen Liste innerhalb eines React Select-Elements. Ich habe ungefähr 6.500 Optionen, die in die Auswahl geladen werden. Zuerst hatte ich Probleme mit der Verzögerung der Suchfunktion, aber dann fing ich an, React-Select-Fast-Filter-Optionen zu verwenden, die dieses Problem behoben haben. Jetzt ist das Problem, dass ich bestimmte Optionen abhängig von den propType “Picks” deaktivieren muss. Hier ist der Code:
import React, {Component} from 'react'
import PropTypes from 'prop-types';
import 'react-select/dist/react-select.css'
import 'react-virtualized/styles.css'
import 'react-virtualized-select/styles.css'
import Select from 'react-virtualized-select'
import createFilterOptions from 'react-select-fast-filter-options';
let options = [];
if(typeof stockSearchStocks !== 'undefined') {
//loads in all available options from backend by laying down a static js var
options = stockSearchStocks
}
const filterOptions = createFilterOptions({options});
class StockSearch extends Component {
static propTypes = {
exchanges: PropTypes.array.isRequired,
onSelectChange: PropTypes.func.isRequired,
searchDisabled: PropTypes.bool.isRequired,
picks: PropTypes.array.isRequired,
stock_edit_to_show: PropTypes.number
}
/**
* Component Bridge Function
* @param stock_id stocks id in the database
*/
stockSearchChange = (stock_id) => {
this.props.onSelectChange(stock_id);
}
//this is my current attempt to at least
//disable options on component mount but this doesn't seem to be working
componentWillMount = () => {
console.log('picks!: ' + JSON.stringify(this.props.picks));
let pickIDs = this.props.picks.map((p) => p.stock_id);
options = options.map((o) => {
// console.log(pickIDs.indexOf(o.value));
if(pickIDs.indexOf(o.value)) {
// console.log('here is the option: ' + JSON.stringify(o));
// console.log('here is the option: ' + o.disabled);
o.disabled = true;
}
})
}
/**
* handles selected option from the stock select
* @param selectedOption
*/
handleSelect = (selectedOption) => {
this.stockSearchChange(selectedOption.value);
}
render() {
return (
<div className="stock-search-container">
<Select
name="stock-search"
options={options}
placeholder="Type or select a stock here..."
onChange={this.handleSelect}
disabled={this.props.searchDisabled}
value={this.props.stock_edit_to_show}
filterOptions={filterOptions}
/>
</div>
)
}
}
export default StockSearch;
Ich habe versucht, die Picks-Requisiten zu filtern und diese Optionsvariable so zu ändern, dass sie enthalten ist disabled:true
aber das verzögert die Anwendung und ich bin mir nicht sicher, ob das jetzt funktionieren wird, da ich React-Select-Fast-Filter-Optionen verwende, da es anscheinend eine Art Indexierung durchführt. Gibt es eine Möglichkeit, die Optionsvariable zu filtern, um alle Instanzen der Picks-Prop zu finden und diese Optionen schnell zu deaktivieren?