J'ai un composant conteneur qui rend un composant enfant avec une entrée. J'aimerais avoir accès à la valeur du composant enfant lors de l'événement onChange
, mais j'obtiens un objet "Proxy" au lieu de la valeur d'entrée.
Composant de conteneur
...
class InputContainer extends React.Component {
handleChange = (val) => {
console.log(val);
// => Proxy { [[Handler]]: Object, [[Target]]: SyntheticEvent, [[isRevoked]]: false }
}
render() {
return <Input handleChange={this.handleChange} {...this.props} />;
}
}
export default connect(mapStateToProps, mapDispatchToProps)(InputContainer);
Composant d'entrée
export default function Input(props) {
return <input onChange={props.handleChange} />;
}
Pourquoi est-ce que je reçois cet objet "Proxy" et comment puis-je obtenir la valeur de l'entrée à partir de InputContainer
?
Ce que vous voyez est une instance de SyntheticEvent . Notez que tout fonctionnera de la même manière, c’est-à-dire que cela devrait fonctionner:
console.log('ev -> ', ev.target.value);
Toutefois, si vous souhaitez voir les valeurs dans les outils de développement, essayez:
console.log('ev -> ', ev.nativeEvent);
Source: https://facebook.github.io/react/docs/events.html
Citation:
Vos gestionnaires d'événements se verront transmettre des instances de SyntheticEvent, un wrapper multi-navigateurs entourant l'événement natif du navigateur. Il a la même interface que l'événement natif du navigateur, y compris stopPropagation () et preventDefault (), à l'exception des événements qui fonctionnent de manière identique sur tous les navigateurs. Si vous estimez avoir besoin de l'événement de navigateur sous-jacent pour une raison quelconque, utilisez simplement l'attribut nativeEvent pour l'obtenir.
C'est parfaitement normal. Vous pouvez accéder à la valeur via event.target.value
:
handleChange(event) {
console.log(event.target.value);
}
Vous ne savez pas si c'est une erreur de frappe, mais vous avez hangleChange
au lieu de handleChange
. Quoi qu'il en soit, onChange
passe un objet de type Event
-, la valeur peut être trouvée dans event.target.value
handleChange(event) {
console.log(event.target.value);