javascript - 我的删除按钮功能有什么问题 - 反应
问题描述
当我单击删除按钮时,什么也没有发生……任何人都知道出了什么问题。我的数据库已连接并且正在运行!我点击的时候有404
错误!
另外,我得到这个: index.js:1 警告:列表中的每个孩子都应该有一个唯一的"key"
道具。
检查Allchallenges
.
in div
(at Allchallenges.js:54
) in Allchallenges
(created by Context.Consumer
) in Route
(at App.js:23
) in Switch
(at App.js:18
) in div
(at App.js:16
) in App
(at src/index.js:10
) in Router
(created by BrowserRouter
) in BrowserRouter
(at src/index.js:9
)
这就是我在 API 方面所拥有的:
//request challenges
router.get("/allchallenges", (req,res) => {
Challenge
.find()
.then(response => {
res.json(response)
})
.catch(error => {
res.json(error)
})
})
//delete challenge
router.get("/allchallenges", (req,res) => {
Challenge
.find()
.then(response => {
res.json(response)
})
.catch(error => {
res.json(error)
})
})
import React from 'react'
import DefaultLayout from "../layout/Default"
import Challengebox from '../components/Challengebox'
import axios from "axios";
class Allchallenges extends React.Component {
constructor() {
super()
this.state = {
challenges: []
}
this.onDelete=this.onDelete.bind(this)
}
componentDidMount(){
debugger
axios({
method: "GET",
url: `${process.env.REACT_APP_API_BASE}/allchallenges`,
withCredentials: true
})
.then(response => {
console.log(response)
let challengeslist = response.data;
this.setState({challenges: challengeslist})
})
.catch(error => {
console.log("You've made an error charles: ",error)
})
}
onDelete(challengeId){
axios
.delete(`${process.env.REACT_APP_API_BASE}/allchallenges/${challengeId}`)
.then(response => {
this.props.history.push("/allchallenges")
})
.catch(err => console.log(err))
}
render() {
return (
<DefaultLayout>
<div className="challengeoverviewlist">
<h1>All challenges</h1>
<div className="challengeboxes">
{
this.state.challenges.map(challenge =>
(
<div className="totalbox">
<Challengebox
key={challenge._id}
id={challenge._id}
title={challenge.title}
description={challenge.description}
/>
<button onClick={() => this.onDelete(challenge._id)}>
Delete
</button>
</div>
))
}
</div>
</div>
</DefaultLayout>
)
}
}
export default Allchallenges
解决方案
您正在打电话axios.delete
,但据我所知,您没有任何处理 DELETE 的路线。
你需要在你的路由器中看起来像这样的东西:
//delete challenge
router.delete("/allchallenges/:challengeId", (req,res) => {
// do something with "req.params.challengeId"
})
推荐阅读
- amazon-web-services - API 网关:在 TEST 按钮上确定,在 Curl 上显示 500
- docker - docker login 失败:tls: server selected unsupported protocol version 301
- python - 读取 CSV 并分配变量的程序
- amazon-web-services - 如何为 ECS 添加带有应用程序负载均衡器的 AWS API 网关?
- java - 重写 gradle 代码以兼容 5.1
- git - IntelliJ 中的交互式预提交挂钩
- visual-studio-code - VSCode,如何在以下声明后备份源代码树?
- php - PHP 使用 preg_replace_callback 短代码函数返回错误的元素顺序
- spring - Spring Cloud Stream 和 @Publisher 注解兼容性
- jmeter - 我们可以更改influx db的http协议的绑定地址吗