J'utilise react js et je ne sais pas pourquoi je reçois des accessoires n'est pas défini.
Voici ma classe.
import React, { Component } from 'react';
const InputHeight = {
height: '50px',
}
function clearData() {
this.refs.input.value = "";
}
export default class TextInput extends Component {
render() {
return (
<input
className="form-control"
ref="input"
name={props.name}
type={props.inputType}
value={props.content}
pattern={props.pattern}
onChange={props.controlFunc}
placeholder={props.placeholder}
style={InputHeight}
required />
);
}
}
TextInput.propTypes = {
inputType: React.PropTypes.oneOf(['text', 'number', 'email']).isRequired,
name: React.PropTypes.string.isRequired,
controlFunc: React.PropTypes.func.isRequired,
content: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
]).isRequired,
placeholder: React.PropTypes.string,
};
Impossible de compiler ./src/components/Parts/SmallBits/FormItems/TextInput.js Ligne 19: 'props' n'est pas défini no-undef Ligne 20: 'props' n'est pas défini no-undef Ligne 21: 'props' n'est pas no-undef défini Ligne 22: "props" n'est pas défini no-undef Ligne 23: "props" n'est pas défini no-undef Line 24: "props" n'est pas défini no-undef
Recherchez les mots clés pour en savoir plus sur chaque erreur.
this.refs.form.clearData();
cliquez dessus et ça me donne
TypeError non capturé: impossible de lire la propriété 'refs' de null
Dans une classe, la façon d'accéder aux accessoires est this.props
pas seulement props
.
export default class TextInput extends Component {
render() {
return (
<input
className="form-control"
ref="input"
name={this.props.name}
type={this.props.inputType}
value={this.props.content}
pattern={this.props.pattern}
onChange={this.props.controlFunc}
placeholder={this.props.placeholder}
style={InputHeight}
required />
);
}
}
Voici votre code révisé avec ce changement.
Quant à cette fonction
function clearData() {
this.refs.input.value = "";
}
Je crois que vous avez 2 problèmes. Tout d'abord, il n'est pas imbriqué dans la classe, donc le mot clé this
ne fait pas référence à cette classe. Deuxièmement, même s'il était imbriqué, une fois que l'appelant appelle cette fonction, le contexte du mot clé this
ne ferait plus référence à votre classe. Il est important de comprendre comment fonctionne le mot clé this
et comment utiliser bind
ou =>
fonctions pour contourner ce comportement.