我正在学习反应,所以我创建了一个简单的应用程序来管理带有标题和描述的笔记。
该应用程序与使用Go创建的REST API通信,因此我可以获取,编辑,创建和删除注释。
因此,问题出在以下地方,我具有删除和编辑注释的这两个功能,它们位于App.js文件中:
removeNote(note) {
fetch('http://localhost:9000/notes/delete', {
mode: 'cors',
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(note)
}).then(res => {
console.log(res.text);
this.getNotes();
})
}
saveEditNote(note) {
fetch('http://localhost:9000/notes/update', {
mode: 'cors',
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(note)
}).then(res => {
console.log(res);
this.getNotes();
})
}
功能不同,但是两个函数的功能几乎相同,它们向后端发送一个http请求,并在获得响应时调用 this.getNotes(); 函数以更新注释列表。
现在,当我按下“删除”按钮时,应用程序成功删除了笔记,并调用getNotes()来更新列表。
当我按下“保存”按钮更新笔记时,应用程序成功更新了笔记,但是,当我调用getNotes()时出现以下错误
未处理的拒绝(TypeError):_this4.getNotes不是函数
问题: 为什么它在“编辑”功能中失败,但是在删除功能中却像超级按钮一样起作用?
我已经像这样绑定了App.js中的函数:
this.getNotes = this.getNotes.bind(this);
所以那不应该是问题。
注意组件标签代码:
cards = this.state.notes.map((note, i) => {
return (
<Note note={note} index={i} onRemoveNote={this.removeNote} onEditNote={this.saveEditNote} key={i}></Note>
)
})
Note组件handleSaveEditNote函数代码:
handleSaveEditNote(note) {
note.name = this.state.noteName;
note.description = this.state.noteDescription;
this.props.onEditNote(note)
}
我通过从Note.js调用App.js的getNotes函数,然后刷新页面窗口来进行解决。
getNotes() {
this.props.onGetNotes();
window.location.reload();
}
但这很丑陋,我应该能够在编辑功能中使用getNotes函数,就像我在删除功能中使用它一样。
任何帮助将不胜感激,感谢您的时间和对英语不好的歉意。祝你有美好的一天!
答案 0 :(得分:3)
saveEditNote(note)
和removeNote(note)
函数呢?您是否像使用getNotes()
函数那样约束它们?如果不是,请绑定它们或使用箭头函数以如下方式声明它们:saveEditNote = note => {...}
和removeNote(note)
函数相同。希望能解决您的问题
答案 1 :(得分:1)
您还需要绑定功能saveEditNote。 this.getNotes()的调用站点位于saveEditNote内部,该位置发生在与定义getNotes不同的位置。