reactjs - 如何使用 React Native 和 Axios 发送表单数据?

我的代码很简单。我必须将表单数据发送到服务器。我的 token 也在工作。但我无法将表单数据作为数据发送。它应该是:“input”:“message”,但这给了我一些非常复杂的东西。我的 Axios 似乎也不错,但我不确定。

const Screen = ({ navigation }) => {
  const [formData, setFormData] = useState();    
    
  const onSubmit = async ({ formData }) => {
    let token = await AsyncStorage.getItem("token");
    const data = new FormData();
    data.append("input", { input: formData });

    axios
      .post(
        `http://example.com/api`,
        (data: data),
        {
          crossdomain: true,
        },
        {
          headers: {
            Authorization: `Bearer ${token}`,
            Accept: "application/json",
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "POST",
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Credentials": "true",
          },
        }
      )
      .then((res) => {
        console.log(res.data);
      })
      .catch((error) => {
        console.log(error);
      });
  };

  return (
    <View>
        <Input
          value={formData}
          onChangeText={setFormData}
          placeholder="Type something"
          onSubmitEditing={() => onSubmit({ formData })}
        />
    </View>
  );
};

export default Screen;

在表单数据部分,我的键是“输入”,我的值是用户写的。所以它就像:“输入”:“用户的消息”。 - 但它提供的数据是这样的:

FormData {
  "_parts": Array [
    Array [
      "input",
      Object {
        "input": "Naber",
      },
    ],
  ],
}

最佳答案

像这样附加到 formData :

data.append("input",formData);

并且您需要将 header Content-Type 作为 multipart/form-data 发送,并使用 axios 发送 formData,如下所示:

axios.post("api",data,{
      headers: {
            Authorization: `Bearer ${token}`,
            Accept: "application/json",
            "Content-Type": "multipart/form-data",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "POST",
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Credentials": "true",
          }
})

如果您在每个请求中发送授权 header ,您可以使用 `axios.defaults.headers.common 附加到所有 axios req header ,如下所示:

axios.defaults.headers.common['Authorization'] =`Bearer ${token}`;

https://stackoverflow.com/questions/63198049/

相关文章:

ruby-on-rails - ActiveStorage 和 s3 - 默认设置所有公开的图像

reactjs - TypeScript 提示组件缺少由 redux 注入(inject)的属性

python - 当我的播放器类与我的平台类之一发生碰撞时,如何制作和结束屏幕?

python - 无法将从 MongoDB 检索到的 json 值返回到 python flask

node.js - 如何避免使用 discord.js api 超过速率限制?

python - 使用 pydbgen 模块时出现 TypeError

mongodb - 更新嵌套数组的字段时,如何使 mongodb 的 "updated"停止?

macos - 没有应用程序包的 QT 命令行可执行二进制文件有 Macdeployqt 吗?

typescript - 为什么 Typescript 不能在赋值中使用泛型的 keyof 类型并将

python - 如何使用python将NPZ文件转换为文本文件