Ich habe angefangen zu lernen zu lernen reagieren und habe in ein Problem geraten, das ich nicht scheinen kann, herauszufinden. Wenn man durch ein Tutorial einen einfachen Kommentar machen Web-App Bearbeitung und ich erhalte diese Störung, wenn ich versuche, um einen Kommentar zu aktualisieren „Typeerror: _this3 ist nicht definiert“, speziell auf diesen Linien:React.js TypeError this.props ist undefined
this.props.updateCommentText(this.refs.newText.value, this.props.index);
und diese ein:
HierupdateCommentText={()=>this.updateComment}
ist die volle JavaScript-Code:
class Comment extends React.Component{
constructor(){
super();
this.state = {
editing: false,
};
this.edit = this.edit.bind(this);
this.save = this.save.bind(this);
}
edit(){
this.setState({
editing: true,
});
}
save(){
this.props.updateCommentText(this.refs.newText.value, this.props.index);
this.setState({
editing: false,
});
}
remove(){
console.log('Removing comment');
this.props.deleteFromBoard(this.props.index)
}
renderNormal(){
return (
<div className="commentContainer">
<div className="commentText">{this.props.children}</div>
<button onClick={this.edit} className="button-primary">Edit</button>
<button onClick={this.remove} className="button-danger">Remove</button>
</div>
);
}
renderForm(){
return (
<div className="commentContainer">
<textarea ref="newText" defaultValue={this.props.children}></textarea>
<button onClick={this.save} className="button-success">Save</button>
</div>
);
}
render(){
if(this.state.editing){
return this.renderForm();
} else {
return this.renderNormal();
}
}
}
class Board extends React.Component{
constructor(){
super();
this.state = {
comments: [
"Hiya",
"Awk well",
"Boo-urns"
],
}
}
removeComment(i){
console.log("Removing comment: " + i);
var arr = this.state.comments;
arr.splice(i, 1);
this.setState({
comments: arr
});
}
updateComment(newText, i){
console.log("Updating comment: " + i);
var arr = this.state.comments;
arr[i] = newText;
this.setState({
comments: arr,
});
}
eachComment(text, i){
return (
<Comment key={i} index={i}
updateCommentText={()=>this.updateComment}
deleteFromBoard={()=>this.removeComment}>
{text}
</Comment>
);
}
render(){
return (
<div className="board">
{
this.state.comments.map(this.eachComment)
}
</div>
);
}
}
// ========================================
ReactDOM.render(
<Board />,
document.getElementById('container')
);
ich etwas gehe davon hat den Gültigkeitsbereich ging, aber ich bin nicht sicher, wo.
Mögliche Duplikat [Typeerror: kann Eigenschaft lesen undefinierter beim Binden onClick] (https://stackoverflow.com/questions/43568344/typeerror-cannot-read-property-function-name-of-undefined-when-binding-onclic) –
Übergeben Sie eine Komponente mit 'ref =" newText "' als ein Kind zu deinem Behälter, du hast es hier beschrieben? Siehe: https://stackoverflow.com/questions/34678340/react-how-to-access-refs-in-this-props-children –
Änderungen ** 1. **: binden Sie den Kontext, um diese innere Karte zu verwenden body, 'this.state.comments.map (this.eachComment, this) '** 2. ** Übergeben Sie den Parameter' updateCommentText = {(a, b) => this.updateComment (a, b)} deleteFromBoard = {(a, b) => this.removeComment (a, b)} '** 3. ** bind' remove' Methode im Konstruktor. –