首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MERN应用程序中执行删除操作后,React前端未更新

在MERN应用程序中执行删除操作后,React前端未更新
EN

Stack Overflow用户
提问于 2021-07-07 23:57:42
回答 2查看 23关注 0票数 0

我有一个MERN应用程序,当单击delete按钮时,我试图删除一个注释(由标题和内容组成)。当我单击该按钮时,后端mongoDB数据库将更新-该项目实际上已被删除-但随后控制台显示一个错误。

下面是通过相关文件跟踪的删除操作:

代码语言:javascript
复制
// App.jsx

const deleteNote = id => {
    NoteDataService.deleteNote(id)
      .then(response => {
        console.log(`note ${id} deleted`);
        setNotes(prevState => {
          return prevState.notes.filter(note => note._id !== id);
        });
      })
      .catch(e => console.log(e));
  };


// note.js

import http from '../http-common.js';

class NoteDataService {
  createNote = data => http.post('/', data);

  getAll = () => http.get('/');

  deleteNote = id => http.delete(`?id=${id}`);
}

export default new NoteDataService();


// http-common.js

import http from '../http-common.js';

class NoteDataService {
  createNote = data => http.post('/', data);

  getAll = () => http.get('/');

  deleteNote = id => http.delete(`?id=${id}`);
}

export default new NoteDataService();

下面是错误:

代码语言:javascript
复制
App.jsx:41 Uncaught TypeError: Cannot read property 'filter' of undefined
    at App.jsx:41

在我尝试实现的CRUD操作中,似乎只有"Read“(get)功能能够正常工作,以便最初从后端填充我的注释列表(在加载应用程序组件时使用useEffect() )。

EN

回答 2

Stack Overflow用户

发布于 2021-07-08 00:03:17

这行得通..。

代码语言:javascript
复制
  const deleteNote = id => {
    NoteDataService.deleteNote(id)
      .then(response => {
        console.log(`note ${id} deleted`);
        console.log(notes);
        setNotes(notes.filter(note => note._id !== id));
      })
      .catch(e => console.log(e));
  };
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 00:05:32

在挂载组件之前,您的状态notes将为null。一定要检查一下你所在州的notes不是null,它是一个array就可以了

prevState.notes && prevState.notes.filter(note => note._id !== id)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68289328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档