如果更新 SQL 在 ReactJS 中检索到的数据,这是一种有效的方法
Effective way if updating SQL Data Retrieved in ReactJS
早上好,Whosebug!
鉴于在学校和工作之间的空闲时间学习 ReactJS,我一直在尝试找出一种有效的方法来在提交新结果后刷新 SQL 检索到的数据。我为我的机械主题网站创建了一个自定义评论系统,一旦用户提交新评论,它就会将其发送到 SQL 系统。但是,我试图找到一种有效的方法来在点击提交按钮后刷新页面上的结果。我在 useEffect 钩子中尝试了 运行 几个依赖项,我找不到有效的方法。
我是 运行 MySQL、Express、Axios、CORS 和 BodyParser
const [reviewList, setReviewList] = useState([])
const [submitDiv, setSubmitDiv] = useState(false)
const toggleSubmit = () => {
setSubmitDiv(!submitDiv)
}
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
})
toggleSubmit()
}
useEffect(() => {
Axios.get('http://localhost:3001/getReviews').then((response) => {
setReviewList(response.data)
console.log("Review list grabbed.")
})
}, [])
如有任何帮助,我们将不胜感激!
任何文档也将不胜感激。
目前,您从数据库加载的唯一时间是组件安装时。如果您可以可靠地预测当您 POST 到 http://localhost:3001/submit 时会发生什么,那么您可以在本地更新您的状态,而无需再次从数据库中获取。例如:
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
const newReview = {
username: username,
email: email,
reviewtext: reviewtext
}
Axios.post("http://localhost:3001/submit", newReview)
setReviewList(prev => [...prev, newReview]); // <--- Updating state
toggleSubmit()
}
如果你想从数据库中获取数据以确保你有准确的数据,你可以再做一个 axios.get:
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
}).then(() => {
return Axios.get('http://localhost:3001/getReviews')
}).then(() => {
setReviewList(response.data)
});
toggleSubmit()
}
或者使用 async/await 同样的事情:
const submitReview = async (e) => {
e.preventDefault()
e.target.reset()
toggleSubmit()
await Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
})
const response = await Axios.get('http://localhost:3001/getReviews')
setReviewList(response.data)
}
早上好,Whosebug!
鉴于在学校和工作之间的空闲时间学习 ReactJS,我一直在尝试找出一种有效的方法来在提交新结果后刷新 SQL 检索到的数据。我为我的机械主题网站创建了一个自定义评论系统,一旦用户提交新评论,它就会将其发送到 SQL 系统。但是,我试图找到一种有效的方法来在点击提交按钮后刷新页面上的结果。我在 useEffect 钩子中尝试了 运行 几个依赖项,我找不到有效的方法。
我是 运行 MySQL、Express、Axios、CORS 和 BodyParser
const [reviewList, setReviewList] = useState([])
const [submitDiv, setSubmitDiv] = useState(false)
const toggleSubmit = () => {
setSubmitDiv(!submitDiv)
}
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
})
toggleSubmit()
}
useEffect(() => {
Axios.get('http://localhost:3001/getReviews').then((response) => {
setReviewList(response.data)
console.log("Review list grabbed.")
})
}, [])
如有任何帮助,我们将不胜感激!
任何文档也将不胜感激。
目前,您从数据库加载的唯一时间是组件安装时。如果您可以可靠地预测当您 POST 到 http://localhost:3001/submit 时会发生什么,那么您可以在本地更新您的状态,而无需再次从数据库中获取。例如:
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
const newReview = {
username: username,
email: email,
reviewtext: reviewtext
}
Axios.post("http://localhost:3001/submit", newReview)
setReviewList(prev => [...prev, newReview]); // <--- Updating state
toggleSubmit()
}
如果你想从数据库中获取数据以确保你有准确的数据,你可以再做一个 axios.get:
const submitReview = (e) => {
e.preventDefault()
e.target.reset()
Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
}).then(() => {
return Axios.get('http://localhost:3001/getReviews')
}).then(() => {
setReviewList(response.data)
});
toggleSubmit()
}
或者使用 async/await 同样的事情:
const submitReview = async (e) => {
e.preventDefault()
e.target.reset()
toggleSubmit()
await Axios.post("http://localhost:3001/submit", {
username: username,
email: email,
reviewtext: reviewtext
})
const response = await Axios.get('http://localhost:3001/getReviews')
setReviewList(response.data)
}