J'ai un composant parent qui contrôle tout état et un composant enfant qui retourne un menu déroulant et passe (est censé passer, plutôt) le résultat de cliquer sur une option jusqu'au composant parent et mettre à jour le l'état des parents.Réagir dropdown ne pas définir l'état
Parent:
// We're controlling all of our state here and using children
// components only to return lists and handle AJAX calls.
import React, { Component } from 'react';
import SubList from './SubList';
import StopList from './StopList';
class SubCheck extends Component {
constructor (props) {
super(props);
this.state = {
selectedSub: null,
selectedStop: null,
stops: [],
};
this.handleSubSelect.bind(this);
this.handleStopSelect.bind(this);
}
// We want the user to be able to select their specific subway
// stop, so obviously a different array of stops needs to be
// loaded for each subway. We're getting those from utils/stops.json.
handleSubSelect(event) {
var stopData = require('../utils/stops');
var stopsArray = [];
for (var i = 0; i < stopData.length; i++) {
var stop = stopData[i];
if (stop.stop_id.charAt(0) == event.target.onSubSelect) {
stopsArray.push(stop.stop_name);
}
}
this.setState(() => {
console.log('setting state');
return {
selectedSub: event.target.onSubSelect,
stops: stopsArray
}
});
}
handleStopSelect(event) {
this.setState({selectedStop: event.target.onStopSelect});
}
render() {
return (
<div>
<SubList onSubSelect={this.handleSubSelect.bind(this)}/>
<StopList stops={this.state.stops} onStopSelect={this.handleStopSelect.bind(this)}/>
</div>
);
}
}
export default SubCheck;
enfant:
import React from 'react';
import PropTypes from 'prop-types';
function SubList (props) {
const subways = ['', '1', '2', '3', '4', '5', '6',
'S', 'C', 'B', 'D', 'N', 'Q', 'R', 'L']
return (
<select>
{
subways.map(subway =>
<option key={subway} onClick={() => props.onSubSelect(subway)}>
{subway}
</option>
)
}
</select>
)
}
SubList.PropTypes = {
onSubSelect: React.PropTypes.func.isRequired
};
export default SubList;
Quand j'ouvre l'application comme il est et choisissez une option dans le menu déroulant, deux choses ne se produisent pas que j'attendre à passer . Le premier est que le second menu (celui retourné par StopList, dont le code n'est pas inclus ici) n'est pas rempli avec des données. La deuxième chose est que 'setting state' n'est pas connecté à la console. Cette deuxième chose me porte à croire que quelque part dans mon code, je ne passe pas correctement l'option cliquée dans la liste déroulante jusqu'à ma méthode handleSubSelect et donc ne pas correctement définir un nouvel état.
Où est le code de 'StopList'? Qu'est-ce que ça fait exactement? – Dekel