使用React Redux API删除请求删除帖子

托马斯·罗西斯基

当我在控制台上记录this.props时,我得到了一个带有post.id的数组,我想使用onClick函数从列表中删除该项目,并且不显示在页面上。

所以这就是我所拥有的

export const deletePost = id => dispatch => {
  fetch(`https://jsonplaceholder.typicode.com/posts/${id}`, {
    method: "DELETE"
  })
    .then(res => res.json())
    .then(post =>
      dispatch({
        type: DELETE_POST,
        payload: id
      }),
    );
};

my reducer:

const initialState = {
  items: [],
  item: {}
};
    case FETCH_POSTS:
      return {
        ...state,
        items: action.payload
      };
    case DELETE_POST:
      return {
        ...state,
        items: action.payload
      };

Component contains of

const mapStateToProps = state => ({
  posts: state.postsReducer.items,
});

const mapDispatchToProps = {
  fetchPosts, deletePost
}

And Delete button on each post:

<button key={post.id} onClick={()=>this.props.deletePost()}>X</button>```

寂寞公主

我在这里看到了几件事,您应该看一下,希望它们能帮助您解决问题。

首先,请注意您的deletePost函数需要一个带有发布ID的参数但是,在为按钮发布的JSX代码中,根本没有将任何值传递给该函数。这意味着,在分派操作时,属性payload将具有undefined值。

确保更新视图以为其传递ID,以便调用适当的终结点(您的DELETE请求现在可能指向https://jsonplaceholder.typicode.com/posts/undefined当前位置),并且reducer实际上收到您要删除的帖子的ID:

<button key={post.id} onClick={()=>this.props.deletePost(post.id)}>X</button>

您需要检查的第二件事是减速器的实现。根据您对消息和deletePost方法代码的理解action.payload应该包含一个数字。

在这种情况下,您的减速器如何处理减速器中的DELETE_POST动作对我来说并没有太大意义。

case DELETE_POST:
    return {
        ...state,
        items: action.payload
    };

归约器应该是纯函数,对于给定的状态和动作,其根据接收到的动作返回全新的状态。还要记住,您接收到的状态根本无法更改:如果原始实例以任何方式发生了变异,您的代码将无法工作。

在这种情况下,您需要返回一个新状态,在该状态下,您的items属性将替换为缺少您要删除的ID的新列表。但是,items您编写的代码段中,您要用数字替换数组这不是应该发生的事情,首先items应该仍然是一个数字数组。

您实际需要做的是创建一个不包含要删除的项目的新数组您可以使用该filter方法来实现:

case DELETE_POST:
    return {
        ...state,
        items: state.items.filter(item => item !== action.payload)
    };

这段代码完全可以满足您的要求:在这里,我们为items您的州财产分配了一个全新的数组,其中不包括已删除的帖子。

filter返回一个数组,其中包含指定函数返回的项true在这种情况下,我们传递给每个对象的箭头函数会filter返回true与您要删除的帖子ID不同的项。

通过使用此方法,您将不会有任何问题地改变初始state.items值,因为它会filter返回的新实例Array且不会更改原始实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TypeScript使用React-Redux删除重复的属性分配

来自分类Dev

使用REST API进行React + Redux?

来自分类Dev

在React / Redux上使用API的正确方法

来自分类Dev

从hashHistory react-router-redux删除queryKey

来自分类Dev

React-Redux / Rails:记录不会删除

来自分类Dev

React / Redux + Soundcloud API

来自分类Dev

每个API请求中的Redux使用令牌

来自分类Dev

使用Redux对Facebook API的异步请求

来自分类Dev

从状态删除对象后组件未重新加载,我正在使用React-redux

来自分类Dev

为什么我不能使用Redux从React.js中的数组中删除元素

来自分类Dev

无法使用 Graphql 删除帖子

来自分类Dev

如何在Redux中使用React Context API?

来自分类Dev

Redux-React使用api调用填充initialState

来自分类Dev

React Redux Axios Api使用路径参数获取呼叫

来自分类Dev

React-Redux-Hooks API

来自分类Dev

React和Redux:返回未定义的Onclick删除按钮

来自分类Dev

我如何在React中使用React / Redux表单获取帖子值

来自分类Dev

API发布成功后,调度获取请求-React / Redux

来自分类Dev

React-Redux API获取请求操作不执行?

来自分类Dev

React和Redux:401未经授权的错误POST API请求

来自分类Dev

如何使用 HTTP 请求从 API 中删除数据 [React TS]

来自分类Dev

使用Ruby在我的API请求中删除方括号?

来自分类Dev

如何使用 angular 向 REST api 发送删除请求

来自分类Dev

react-redux处理多个请求

来自分类Dev

如何使用Redux Saga测试API请求失败?

来自分类Dev

从Redux状态删除项目

来自分类Dev

使用immutable.js进行React和Redux:从列表中删除一项时无法获取正确的状态数据

来自分类Dev

使用 redux 和 react,为什么获取新数据会删除我以前状态的一部分?

来自分类Dev

使用Webpack调试Redux / React

Related 相关文章

  1. 1

    TypeScript使用React-Redux删除重复的属性分配

  2. 2

    使用REST API进行React + Redux?

  3. 3

    在React / Redux上使用API的正确方法

  4. 4

    从hashHistory react-router-redux删除queryKey

  5. 5

    React-Redux / Rails:记录不会删除

  6. 6

    React / Redux + Soundcloud API

  7. 7

    每个API请求中的Redux使用令牌

  8. 8

    使用Redux对Facebook API的异步请求

  9. 9

    从状态删除对象后组件未重新加载,我正在使用React-redux

  10. 10

    为什么我不能使用Redux从React.js中的数组中删除元素

  11. 11

    无法使用 Graphql 删除帖子

  12. 12

    如何在Redux中使用React Context API?

  13. 13

    Redux-React使用api调用填充initialState

  14. 14

    React Redux Axios Api使用路径参数获取呼叫

  15. 15

    React-Redux-Hooks API

  16. 16

    React和Redux:返回未定义的Onclick删除按钮

  17. 17

    我如何在React中使用React / Redux表单获取帖子值

  18. 18

    API发布成功后,调度获取请求-React / Redux

  19. 19

    React-Redux API获取请求操作不执行?

  20. 20

    React和Redux:401未经授权的错误POST API请求

  21. 21

    如何使用 HTTP 请求从 API 中删除数据 [React TS]

  22. 22

    使用Ruby在我的API请求中删除方括号?

  23. 23

    如何使用 angular 向 REST api 发送删除请求

  24. 24

    react-redux处理多个请求

  25. 25

    如何使用Redux Saga测试API请求失败?

  26. 26

    从Redux状态删除项目

  27. 27

    使用immutable.js进行React和Redux:从列表中删除一项时无法获取正确的状态数据

  28. 28

    使用 redux 和 react,为什么获取新数据会删除我以前状态的一部分?

  29. 29

    使用Webpack调试Redux / React

热门标签

归档