2017-06-14 1 views
0

J'utilise map pour effectuer une boucle sur un tableau d'objets. J'utilise ces données pour remplir un formulaire mais j'ai des problèmes avec la fonction handleInputChange. Comment initier handleInputChange lorsque j'utilise un composant. L'erreur que je reçois est this.setState is not a function at handleInputChangeErreurs de formulaire avec handleInputChange dans le composant

Chemin: formComponent.jsx

return (
     <li> 
     <SingleInput 
      inputType={'text'} 
      title={'Company name'} 
      name={'position.company'} 
      controlFunc={this.props.handleInputChange} 
      content={this.props.company} 
      placeholder={'Company name'} 
      bsSize={null} 
     /> 

     </li> 
    ); 

CareerHistoryPositionsUpdateForm.propTypes = { 
    company: PropTypes.string, 
    title: PropTypes.string, 
    controlFunc: PropTypes.string 
}; 

chemin: `form.jsx »

handleInputChange(event) { 
    const target = event.target; 
    const value = target.type === 'checkbox' ? target.checked : target.value; 
    const name = target.name; 

    this.setState({ 
    [name]: value 
    }); 
} 

renderPositions() { 
    const profileCandidateCollection = this.props.profileCandidate; 
    const careerHistoryPositions = profileCandidateCollection && profileCandidateCollection.careerHistoryPositions; 
    if (careerHistoryPositions) { 
    return careerHistoryPositions.map((position) => { 

     return (
     <CareerHistoryPositionsUpdateForm 
      key={position.uniqueId} 
      company={position.company} 
      controlFunc={this.handleInputChange} 
     /> 
    ) 
    }) 
    } 
} 

render() { 
    return (
    <form className="careerHistoryForm" onSubmit={this.handleFormSubmit}> 
     <ul> 
     <p>Test</p> 
     {this.renderPositions()} 
     </ul> 

     <input type="submit" className="btn btn-primary" value="Save" /> 
    </form> 
); 
} 
+0

Copie possible de [Impossible d'accéder à l'instance React (this) dans le gestionnaire d'événements] (https://stackoverflow.com/questions/29577977/unable-to-access-react-instance-this-inside-event-handler) –

Répondre

0

Vous devez bindhandleInputChange à l'instance du composant afin this dans la fonction référence l'objet attendu quand il s'appelle:

class YourComponent extends React.Component { 
    constructor(props) { 
    super(props) 
    this.handleInputChange = this.handleInputChange.bind(this) 
    } 
} 

Si vous utilisez babel-preset-stage-2 (ou à l'aide d'outillage qui configure le nécessaire plug-in Babel pour vous, comme create-react-app), vous pouvez utiliser cette slightly nicer syntax pour lier la fonction lorsque vous définir:

class YourComponent extends React.Component { 
    handleInputChange = (event) => { 
    // ... 
    } 
} 
+0

hmmm. J'obtiens cette erreur 'Vous avez fourni un prop 'value' à un champ de formulaire sans un gestionnaire 'onChange'. Cela rendra un champ en lecture seule. Si le champ doit être modifiable, utilisez 'defaultValue'. Sinon, définissez 'onChange' ou 'readOnly'. Vérifiez la méthode de rendu de 'FormControl'.' – bp123

+0

Désolé, je ne suis pas sûr de ce que j'ai changé mais l'erreur a disparu. Maintenant, je ne peux pas taper dans le champ de saisie et il n'y a pas d'erreurs dans la console. – bp123

+0

Vous fournissez une valeur à une entrée mais vous ne fournissez pas de gestionnaire onChange à cette entrée. C'est pourquoi réagissez en donnant cet avertissement. Selon cet avertissement, ce type d'entrée est dans le composant FormControl. –