Basisfunktionalität funktioniert.Reagieren + Karte + Taste nicht
- Drucken Sie eine Liste DONE
- eine Schaltfläche, um jede Liste hinzufügen DONE
- Taste eine bestimmte Funktion aufrufen. JETZT ARBEITEN !!!
THANKS ALL OF YOU GUYS! - 30/10/2017 - I found solution. In the end of const renderItems, I just added a simple this and works. of course, I forgot in this sample to add this.handleClick = this.handleClick.bind(this); on constructor. So now, is working to me
Ich habe bereits Forschung darüber, und die beste Lösung, die ich war hier: Aber jedes Mal, wenn ich versuche, diese Anleitung zu verwenden: https://reactjs.org/docs/handling-events.html
Aber ich bekomme immer die Fehlermeldung:
Uncaught TypeError: Cannot read property 'handleClick' of undefined
und ich kann nicht verstehen, warum. Was habe ich falsch gemacht?
import React, { Component } from 'react';
import axios from 'axios';
class myApp extends Component {
constructor(props) {
super(props);
this.state = {
repos: []
};
this.handleClick = this.handleClick.bind(this); // ADDED
}
componentDidMount() {
var $this = this;
var URL = JSON;
axios.get(URL).then(function(res) {
$this.setState({
repos: res.data
});
})
.catch(function(e) {
console.log("ERROR ", e);
});
}
handleClick() {
console.log('this is:', this);
}
render() {
const renderItems = this.state.repos.map(function(repo, i) {
return <li
key={i}>
<a onClick={(e) => this.handleClick(e)} >Click here!</a>
<span className='repoName'>
{repo.full_name}
</span>
<hr />
</li>
}, this); // just added THIS!
return (
<ul>
{renderItems}
</ul>
<section className='target'>
Target
</section>
);
}
}
export default myApp;
es ist ein sehr häufiges „Kontext Problem“, müssen Sie diesen (Klassenkontext) binden, mit Funktionskarte Rückruf oder Pfeil Funktion wie folgt verwendet werden: 'this.state.repos .map ((Repo, i) => { ' –
Lamba ist ein verbindliches Verfahren einführen können, so dass Sie –
fallen muss ich Lösung gefunden nicht in diese' this' Falle. Am Ende von 'const renderItems', ich habe gerade . ein einfaches 'this' und arbeitet natürlich habe ich vergessen, in dieser Probe hinzuzufügen' this.handleClick = this.handleClick.bind (diese) hinzugefügt;. So, jetzt 'auf ** Konstruktor **, arbeitet mir . –