reactjs - 使用 React 将表单发布到 API
问题描述
我使用 Staticman ( staticman.net ) 在我的 Gatsby ( gatsbyjs.org ) 网站上发表评论。
我一直在使用带有参数的经典 HTML 表单method="POST"
,action="https://api.staticman.net/..."
因为这是 Staticman 所期望的(文档)。
但是我想让它更“反应”,我已经将表单操作更改为一个handleSumbit()
函数:
handleSubmit(event) {
event.preventDefault()
fetch("https://api.staticman.net/...", {
method: "POST",
body: event.target,
})
}
我觉得这不起作用,因为 API 需要一个HTTP POST 请求,具有application/x-www-form-urlencoded
内容类型,而 myevent.target
是一个包含大量 React 信息的表单。
如何使我的fetch()
请求看起来与 HTTP POST 表单提交完全一样?
解决方案
我会使用类似query-string
包的东西从你的组件状态重建 POST 数据。不确定 staticman 的具体细节,但我认为您的反应组件状态中有表单值,因此您可以执行以下操作:
handleSubmit = (event) => {
event.preventDefault()
fetch("https://api.staticman.net/...", {
method: "POST",
body: queryString.stringify({
this.state.username,
this.state.subject
})
})
}
推荐阅读
- react-native - 用 Jest 在 React Native 中测试 TextInput 的值变化
- xamarin.forms - Xamarin Forms - 如何使用 PushModalAsync 从右到左为模式设置动画?
- elasticsearch - 查询 ~10M 文档索引和更多问题时 fielddata=true 会有什么影响
- javascript - React Native 无法返回数组
- ruby - 我需要一个 cron 表达式
- laravel-5.2 - 使用带变量的控制器路由时出现问题
- apache-drill - Apache Drill 不使用整个直接内存
- python - 覆盖导入的类变量 - django/python
- sql - SQL 括号在哪里需要条件?
- elixir - 使用 Timex 间隔