Ich bin "neu-ish" zu reagieren. Ich versuche, eine benutzerdefinierte Komponente zu erstellen, die eine Liste von Elementen in einem Auswahlmenü anzeigt. Der Benutzer kann eine Option aus dem Menü auswählen. Nach dem Abschluss befindet sich darunter eine Schaltfläche "Hinzufügen". Wenn Sie darauf klicken, wird ein weiteres Auswahlmenü angezeigt, das mit den verbleibenden, nicht ausgewählten Optionen des ersten Auswahlmenüs gefüllt wird. Dies würde idealerweise mit jedem weiteren Klick auf den Button Hinzufügen so lange weitergehen, bis nur noch eine Option übrig ist.Dynamic React Wählen Sie Menü Komponente
Ich habe den folgenden Code erstellt, der das anfängliche Auswahlmenü anzeigt, aber ich habe Probleme, meinen Kopf darum zu wickeln, wohin ich damit gehen soll.
import React from 'react';
import { Grid, Row, Col, Button, FormGroup, ControlLabel, FormControl } from 'react-bootstrap';
class App extends React.Component {
constructor(props) {
super(props);
this.props = props;
this.state = {
fruits: [
{ selected: false, fruit: 'Banana', value: 'banana' },
{ selected: false, fruit: 'Apple', value: 'apple' },
{ selected: false, fruit: 'Orange', value: 'orange' }
]
};
this._handleClick = this._handleClick.bind(this);
}
_handleClick(event) {
}
_handleChange(option) {
// this.setState({ value: option, selected: true });
}
render() {
return (
<div>
<Grid>
<Row>
<SelectMenu data={this.state.fruits} onChange={this._handleChange.bind(this)} />
</Row>
<Row>
<Col xs={12}>
<p>
<Button href="#" onClick={this._handleClick}>Add</Button>
</p>
</Col>
</Row>
</Grid>
</div>
);
}
}
class SelectMenu extends React.Component<any, any> {
constructor(props) {
super(props);
this.state = {
value: undefined
};
}
_handleChange(event) {
this.props.onChange(event.target.value);
}
render() {
const unselected = this.props.data.filter(fruit => fruit.selected == false);
return (
<Col sm={3}>
<FormGroup controlId="formControlsSelect">
<ControlLabel>Select</ControlLabel>
<FormControl componentClass="select" placeholder="select" onChange={this._handleChange.bind(this)} value={this.state.value}>
{this.props.data.map((option, index) => {
return <option key={index} value={option.value}>{option.location}</option>;
})};
</FormControl>
</FormGroup>
</Col>
);
}
}
export default App;
Dies funktioniert nicht. Ich hoffe, dass mich jemand auf den richtigen Weg bringt, um das zu schaffen.
Können Sie näher erläutern, was Sie meinen, wenn Sie sagen "funktioniert nicht"? Du übergibst '_handleChange' an' onChange', was aufgerufen wird, aber 'setState' ist in deiner' _handleChange'-Funktion auskommentiert. Kannst du zufällig ein jsFiddle erstellen? – aug
Wenn ich sage, dass es nicht funktioniert, ich meine, es funktioniert nicht in der Art, die ich suche. Es macht das select-Element aber die _handleChange-Funktion, auch wenn die Methode setState unkommentiert ist, hilft nicht mit der Funktionalität, nach der ich suche. – addam