如何在react中使用axios删除单个项目

2024-03-16

我查看了很多文章和帖子,例如this https://stackoverflow.com/questions/26806084/delete-a-comment-react-js但它在我的情况下不起作用。我只需要使用 axios 从我的应用程序的帖子列表中删除一个项目。在 axios 文档中,它说您需要将参数传递给删除方法。另外,我在大多数应用程序中都使用了 id,但在其状态中没有 id。但我无法让它工作。请查看我的整个代码。我知道我的删除方法是错误的,请帮我修复它:

    // The individual post component
    const Post = props => (
    <article className="post">
        <h2 className="post-title">{props.title}</h2>
        <hr />
        <p className="post-content">{props.content}</p>
        <button onClick={props.delete}>Delete this post</button>
    </article>
);

// The seperate form component to be written later

class Form extends React.Component {}

// The posts loop component

class Posts extends React.Component {
    state = {
        posts: [],
        post: {
            title: "",
            content: ""
        }
        // error:false
    };

    componentDidMount() {
        const { posts } = this.state;
        axios
            .get("url")
            .then(response => {
            const data = Object.values(response.data);
            this.setState({ posts : data });
            });
    }
    handleChange = event => {
        const [name , value] = [event.target.name, event.target.value];
        // const value = event.target.value;
        const { post } = this.state;
        const newPost = {
            ...post,
            [name]: value
        };
        this.setState({ post: newPost });
    };

    handleSubmit = event => {
        event.preventDefault();
        const {post} = this.state;
        const {posts} = this.state;
        axios
            .post("url", post)
            .then(response => {
            // console.log(response);
            const newPost = Object.values(response.data);
            this.setState({ post: newPost });
            const updatedPosts =  [...posts, {title:post.title,content:post.content}];
            this.setState({ posts: updatedPosts});
            // console.log(post);
            console.log(updatedPosts);
            console.log(this.state.posts);
            });
    };

    handleDelete = () => {
        const { post } = this.state;
        axios.delete("url",{params: {id: post.id}})
        .then(response => {
            console.log(response);
        });
    };

    render() {
        let posts = <p>No posts yet</p>;
        if (this.state.posts !== null) {
            posts = this.state.posts.map(post => {
                return <Post 
                                 key={post.id} 
                                 {...post}
                                 delete={this.handleDelete}/>;
            });
        }

        return (
            <React.Fragment>
                {posts}
                <form className="new-post-form" onSubmit={this.handleSubmit}>
                    <label>
                        Post title
                        <input
                            className="title-input"
                            type="text"
                            name="title"
                            onChange={this.handleChange}
                        />
                    </label>
                    <label>
                        Post content
                        <input
                            className="content-input"
                            type="text"
                            name="content"
                            onChange={this.handleChange}
                        />
                    </label>
                    <input className="submit-button" type="submit" value="submit" />
                </form>
            </React.Fragment>
        );
    }
}

我还在控制台中看到此错误: 未捕获(承诺中)类型错误:无法将未定义或 null 转换为对象 at Function.values 位于 get 方法中。 再次感谢。


您没有具体说明您的内容Post组件应该删除。换句话说,props.delete没有收到id传递给您的父组件。为此,您可以将其更改为() => props.delete(props.id)然后在你的父组件中你需要有handleDelete方法接收到id您要定位的项目的id我们早些时候放弃了Post.

我不知道您的服务器是如何设置的,但使用您问题中最初的 axios 请求,您的代码将如下所示:

handleDelete = (itemId) => {
    // Whatever you want to do with that item
    axios.delete("url", { params: { id: itemId } }).then(response => {
      console.log(response);
    });

这是一个代码沙箱 https://codesandbox.io/s/vyyrxrnvql(在构造函数中使用一些虚拟数据)显示在 a 中传递的项目console.log()(axios 语句被注释掉)。


编辑:如何使用 Firebase REST API 发出 axios 删除请求

哦,抱歉,我没有看到您正在使用 Firebase。直接 REST 请求与 Firebase 略有不同。在您的配置中,请求应如下所示:

axios.delete(`${url}/${firebasePostId}.json`).then(response => {
    console.log(response)
})

这是假设您的 Firebase 规则允许未经授权的请求(我强烈建议不要这样做,因为任何人都可以发送此请求)。

请注意firebasePostId是您发送时 Firebase 提供的推送键POST向他们提出要求,实际上是一个很好的选择id对于你的帖子。一个例子是-LOLok8zH3B8RonrWdZs你在评论中提到的。

有关 Firebase REST API 语法的更多信息,请查看他们的文档 https://firebase.google.com/docs/reference/rest/database/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在react中使用axios删除单个项目 的相关文章

随机推荐

  • 在 slick 2.0 上,我发现无法存储用户定义的字段

    我用的是slick 2 0 rc 我已经定义了字段 UserId case class UserId id Long extends AnyVal with BaseId object UserId extends IdCompanion
  • EPPlus 条件格式

    我尝试遵循这一点 使用 EPPlus 按表达式进行条件格式化 https stackoverflow com questions 13196762 conditional formatting by expression using epp
  • 在 IPython 中绘图时抑制对象的输出

    在 IPython 中绘制直方图时是否可以抑制数组输出 例如 plt hist OIR Range bins named True histtype bar 在显示图形之前输出 打印数组信息 就放 在代码之后 它仅适用于Jupyter笔记本
  • 包含 TRY CATCH ROLLBACK 模式的嵌套存储过程?

    我对以下模式的副作用和潜在问题感兴趣 CREATE PROCEDURE Name AS BEGIN BEGIN TRANSACTION BEGIN TRY Perform work call nested procedures END TR
  • 访问 VBA 记录集字符串比较不适用于通配符

    我在 Excel 中使用 VBA 的经验丰富 但在 Access 2010 中使用 VBA 的经验很少 我试图从其中一个字段以 X 结尾的记录集中删除记录 当我使用通配符时 比较失败 当我使用特定字符串时 比较按预期进行 这是我正在使用的代
  • 在代码中设置 WPF 标签的 Style 属性?

    在 App xaml 中 我有以下代码
  • 如何使用 javascript 跨 2 个域共享 cookie?

    我希望能够在 example com 和 mysite com 之间访问和设置 cookie 我怎么做 您不能单独使用 cookie 来做到这一点 它们是按域显式设置的 并且没有合法的 读 非利用 方法来为另一个域设置它们 但是 如果您控制
  • 如何使用 javascript/jquery 将 3 个画布 HTML 元素合并到 1 个图像文件中? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有 3 个画布 即 canvasTarget canvasTarget2 canvasTarget3 如下所示 var canvas do
  • AJAX 到 Web 方法不返回 JSON

    我正在使用 AJAX 从我的 js 文件调用 aspx 页面中的 Web 方法 我已将方法设置为 WebMethod 并且该页面继承自System Web Ui Page 类 它仍然没有将 JSON 格式返回给我调用的 ajax 函数 这是
  • vim:在 vim-gnome 中使用 ctrl-Q 进行可视块模式

    我在 windows 和 linux 上使用 vim 在Linux上 我想将ctrl Q设置为可视块选择 但仍然保持将ctrl v设置为粘贴的mswin行为 如何保持 mswin 的行为并使用 ctrl Q 进行视觉块模式 编辑 我虽然 m
  • 如何使用 SqlDataReader 获取列的 DataType 和 Size?

    我正在尝试获取每列的数据类型以进行一些验证 我已经尝试过getSchemaTable但它只给了我没有值的表的模式 例如 我的数据库中有一个表和一个列名 id declarant 我想从中检索值的数据类型和大小id declarant 这是代
  • Microsoft Edge 中内容脚本和后台脚本之间的通信

    我的沟通有问题browser runtime connect在我的测试回声扩展的内容脚本和后台脚本之间 我已经发布了我的代码和扩展包github https github com alexeysidorov92 edge echo exte
  • 如何实际检测 musl libc?

    musl 团队声称不需要检测 musl libc 的方法 因为它们只实现标准功能并且没有需要检测的怪癖 直到今天 这种说法很可能是正确的 但现在已经不再正确了 正常的功能检测不起作用 因为该功能存在但已损坏 我宁愿不探测它 因为我不想在编译
  • 如何捕获C++正则表达式中的0-2组并打印它们?

    Edit 3 当我陷入正则表达式困境时 我采用了 good ol 自定义解析方法 事实证明这并没有那么糟糕 因为文件内容可以非常整齐地标记 并且可以使用以下命令在循环中解析标记very简单的状态机 对于那些想要检查的人 在我在 Stacko
  • DataGridComboBoxColumn 不更新模型 WPF

    我在 WPF 和 DataGridComboBoxColumn 中使用 Datagrid 请找到下面的代码
  • Android 中密码字段的正则表达式

    我如何验证EditText with Regex通过允许特定字符 我的条件是 密码规则 一个大写字母 一个号码 一个符号 任何可以接受的正常符号 我可以知道实现我的目标的正确方法是什么吗 试试这个可能有帮助 0 9 a z A Z S 4
  • ko.mapping 创建函数,扩展对象

    是否可以在映射过程中修改对象的模式 由于缺乏更好的术语 我想是的 我似乎无法让它发挥作用 我正在尝试这样的事情 var data itemOne someData itemTwo moreData var mapping newItem c
  • 结果显示为空

    我有一个Customer创建的 JSON 对象的值如下 Title Mr FirstName S LastName J Birthday 01 01 2011 Address Line1 Line1 Line2 Line2 City Cit
  • PHP 搜索数组列进行匹配

    我有一个如下所示的数组 其中有多个列 我想在第一列中搜索特定值 并返回匹配的行 这可能吗 例如 Array 0 gt Array id gt 1 column2 gt value2 column3 gt value3 column4 gt
  • 如何在react中使用axios删除单个项目

    我查看了很多文章和帖子 例如this https stackoverflow com questions 26806084 delete a comment react js但它在我的情况下不起作用 我只需要使用 axios 从我的应用程序