React Hooks: 如何向服务器发起POST请求
React Hooks: 如何向服务器发起POST请求
我是一个初学者。我正在尝试在React.js中使用一个简单表单实现POST请求,但我无法弄清楚如何将POST请求发送到数据库。我猜我还需要使用
以下是来自express.js(后端)的代码:
var router = express.Router(); const pool = require("../config.js"); var cors = require('cors'); router.get("/game", cors(), (req, res) => { pool .query("SELECT * FROM game") .then((data) => res.json(data)) .catch((e) => { res.sendStatus(404), console.log(e); }); }); router.post("/game", (req, res) => { const { name } = req.body; pool .query('INSERT INTO game(name) values($1);', [name]) .then(data => res.status(201).json(data)) .catch(e => res.sendStatus(404)); }); module.exports = router;
React Hooks:如何向服务器发出POST请求
在开发React应用时,我们经常需要与服务器进行交互,例如发送POST请求。本文将介绍如何使用React Hooks发送POST请求,并解决一些常见的问题。
首先,我们需要在表单的输入框中添加一个name属性,并监听onChange事件。当用户在输入框中输入内容时,我们会调用setFormData函数来更新formData的值。代码如下:
const [formData, setFormData] = useState({}) const handleChange = (event) => { setFormData({ [event.target.name]: event.target.value }) } return ()
在上述代码中,我们将formData.name绑定到了输入框的value属性上,这样当用户输入内容时,会触发handleChange函数来更新formData的值。
接下来,我们需要在按钮的onClick事件中调用POST请求。代码如下:
const eventHandler = (event) => { fetch('http://localhost:3000/game', { method: 'POST', body: JSON.stringify(formData), }) .then((res) => res.json()) .then((result) => { console.log(result) setFormData('') }) .catch((err) => console.log('error')) }
在上述代码中,我们使用fetch函数发送POST请求,并将formData作为请求的body参数。注意,我们需要使用JSON.stringify方法将formData转换为JSON格式。
最后,我们可以在发送POST请求后,根据服务器返回的结果进行相应的处理。在上述代码中,我们使用.then方法来处理服务器返回的结果,并将其打印到控制台。
我们介绍了如何使用React Hooks发送POST请求到服务器的方法。通过监听输入框的onChange事件来更新formData的值,并使用fetch函数发送POST请求。同时,我们还解决了一些常见的问题,例如使用JSON.stringify方法将formData转换为JSON格式,以及在发送请求后清空formData的值。
希望本文对你有所帮助!如果有任何问题,请随时留言。
React Hooks: 如何向服务器发起POST请求
在这里,你可以这样做:
在组件挂载时获取游戏数据。当表单提交时,提交新的游戏。
export default function App() { const [data, setData] = useState([]) const [formData, setFormData] = useState('') useEffect(() => { fetchGames() // 在组件挂载时获取游戏数据 }, []) const fetchGames = () => { fetch('http://localhost:3000/game', { method: 'GET', }) .then((res) => res.json()) .then((result) => setData(result.rows)) .catch((err) => console.log('error')) } const saveGames = () => { fetch('http://localhost:3000/game', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name: formData, // 使用你自己的属性名/键 }), }) .then((res) => res.json()) .then((result) => setData(result.rows)) .catch((err) => console.log('error')) } const handleSubmit = (event) => { event.preventDefault() saveGames() // 在表单提交时保存游戏数据 } const handleChange = (event) => { setFormData(event.target.value) } return ({/* 这里不需要使用 method="post",因为 POST 请求是由 `fetch` 发起的,而不是 `form` */} {/* 另外,注意我修改了函数名为 handleSubmit */} {data && data.map((element, index) => () }))}
你可以阅读这篇文章了解如何使用fetch,以及这篇文章了解ReactJS中的表单工作原理。
另外,你应该考虑使用axios而不是fetch。axios在旧的浏览器上也能更好地工作。参考这个链接。
谢谢。老实说,我以前没有使用过axios,但我也会学习的。