javascript - React hooks 中的 fetch() 删除方法(使用 context api)

标签 javascript reactjs fetch react-hooks http-delete

我在从 json 服务器删除项目时遇到问题。现在我有一个组件,其中我使用无状态函数组件从 api 生成 li。在另一个组件中,我有一个表单,可以在其中添加数据。一切正常,直到我尝试删除项目...单击后删除项目的想法 id(该方法位于 li 上)。奇怪的是,点击后没有任何反应,但刷新页面后点击的项目就消失了......我也尝试过使用过滤方法,但没有帮助。在此“应用程序”中,我使用上下文 api 来管理状态。 代码:

import React, { useContext, useEffect } from 'react';
import { MovieContext } from '../contexts/MovieContext';

const MovieList = () => {
  const { movies, setMovie } = useContext(MovieContext);

  const handleDelete = e => {
    const saved = e;
    fetch(
      `http://localhost:3004/movies/${e.target.id}`,
      {
        method: 'DELETE'
      },
      e.persist()
    )
      .then(m => m.json())
      .then(() => movies.filter(movie => movie.id === saved.target.id))
      .then(() => console.log(movies));
  };

  useEffect(() => {
    console.log(movies);
  });

  return (
    <div>
      <ul>
        {movies.map(movie => (
          <li id={movie.id} key={movie.id} onClick={handleDelete}>
            {movie.title}
          </li>
        ))}
      </ul>
    </div>
  );
};

export default MovieList;

感谢您的帮助!

最佳答案

Array.filter 不会修改原始数组;它返回一个删除了过滤元素的新元素。即使确实如此,在 React 中,修改原始数组也不会改变状态,您需要调用 setter 并向其传递一个新对象。所以你想做 setMovie(movies.filter(movie => movie.id === saving.target.id))

关于javascript - React hooks 中的 fetch() 删除方法(使用 context api),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417241/

相关文章:

css - 我们如何将 css 属性添加到样式组件中的类?

reactjs - 使用 redux 和异步请求响应钩子(Hook)表单

vue.js - 如何在nuxt3插件中设置$fetch的baseURL(进行自定义获取)

php - mysql union 和 order 不起作用

javascript - 使用 socket.io 的内存泄漏

javascript - AngularJs 模板 url 加载抛出 CORS 错误

javascript - 从 React Native 导入 StyleSheet 时未定义不是对象

javascript - 来自 API 的变量未传递到 Angular 中的本地存储

javascript - 重新加载 DIV 后后退按钮不起作用

javascript - 用于 ECDH 输出的 Web 密码学实现 HKDF