【问题标题】:How to pass app state in ReactJS to the backend?如何将 ReactJS 中的应用程序状态传递到后端?
【发布时间】:2020-09-30 15:45:15
【问题描述】:

我正在使用 ReactJS 开发一个 Web 应用程序,我在其中创建了一个表单并将所有输入字段的值存储到应用程序的状态中。也就是说,我的 App.js 文件的状态包含在 Form.js 文件中创建的所有输入字段的值。我希望将状态中存储的信息传递到后端,以便我可以基于它处理数据集。 如何添加一个功能,以便在单击提交按钮时,我的应用程序状态中的所有内容都会传递到后端——比如文本文件或 json 文件。

基本上我想根据用户在表单中提供的信息(使用 ReactJS)搜索数据集(使用 Elasticsearch)。

我是 React 新手,所以我没有太多知识。我已经制作了网络应用程序,但我需要有关如何将通过表单获得的信息传递到后端的建议,以便我可以做进一步的工作。

【问题讨论】:

    标签: javascript reactjs elasticsearch bootstrap-4


    【解决方案1】:

    如何添加功能以便在单击提交按钮时 我的应用程序状态中的所有内容都会传递到后端 - 比如说 到文本文件,或在 json 文件中。

    您可以使用 Axios 或 Fetch API 请求数据以在您的应用程序中使用。您可以使用两种最流行的方法使用 REST API,即 Axios(基于 Promise 的 HTTP 客户端)和 Fetch API(浏览器内置的 Web API)。

    fetch() API 是一种用于从服务器或 API 端点获取资源的内置 JavaScript 方法。类似于 XMLHttpRequest

    Axios 是一个易于使用的基于 Promise 的 HTTP 客户端,适用于浏览器和 node.js。由于 Axios 是基于 Promise 的,我们可以利用 async 和 await 来获得更具可读性和异步性的代码。借助 Axios,我们可以拦截和取消请求,它还具有内置功能,可提供客户端保护,防止跨站请求伪造。

    想了解更多可以参考this

    • 以上这两种方法,都可以用来将你前端的数据提交到后端,这样数据就存储到后端,然后你就可以根据自己的需求对其进行多种操作了。

    您可以参考多个博客和文档以了解更多信息:

    Use axios to fetch data from an api in ReactJS

    Fetch API for POST Request

    Axios

    Difference between Axios and Fetch API

    最近,我还创建了一个应用程序,其中我正在将 React 与 SpringBoot 应用程序集成。

    在此应用程序中。我已经使用 axios 设置了路由器和路由,创建并提交了表单,称为 GET、POST、PUT、DELETE 请求(也使用 fetch API 完成)。

    submitBook= event =>{
    event.preventDefault();
    const book = {
    
             title:  this.state.title,
             author: this.state.author,
             coverphotoURL: this.state.coverphotoURL,
             isbnNumber: this.state.isbnNumber,
             price: this.state.price,
             language: this.state.language
    
    };
    
    const headers = new Headers();
    headers.append("Content-Type", "application/json");
    
    fetch("http://localhost:8080/rest/books",{
    method:"POST",
    body:JSON.stringify(book),
    headers
    })
    .then(response => response.json())
    .then((book) => {
    if(book){
    this.setState({"show":true, "method":"post"});
    setTimeout(() => this.setState({"show":false}),3000);
    
    }
    else{
    this.setState({"show":false});
    
    }});
    this.setState(this.initialState);
    

    };

    查看完整代码,可以参考我的Github Repository

    【讨论】:

    • @VITTHAL BHANDARI 你有没有机会仔细阅读我的回答,期待得到你的反馈,如果有帮助,请不要忘记投票并接受:)
    • 我已阅读您的答案、您的代码和您提供的链接。这绝对有用。我正在花时间根据我的问题调整解决方案。我正在考虑一种存储用户输入的方法,因为我真的没有“后端”。我正在考虑进一步提供此输入以处理我的数据的方法。我会告诉你我找到了什么解决方案。
    • @VITTHAL BHANDARI 如果你没有“后端”,你甚至可以创建一个邮递员模拟服务器来运行你的反应应用程序。并告诉你会找到的解决方案:)
    • 有什么方法可以让我的状态(包含一些搜索关键字)到 python?因为这样我就可以使用这些数据并编写 python 代码来导入 elasticsearch 并根据这些关键字创建搜索?
    • @VITTHAL BHANDARI 如果您使用 axios 或 Fetch API 将您的数据从前端(即您的反应应用程序)发布到后端(使用您必须在 axios 或 Fetch API 中提到的 url),然后数据存储在后端,您可以从中检索数据并对数据执行所需的工作。
    【解决方案2】:

    您需要考虑制作 XHR 或使用 fetch API(或 axios)向后端 API 发出 http 请求。

    【讨论】:

      【解决方案3】:

      使用 axios 调用您在后端定义的 api url。您可以在 youtube 上观看简短教程以熟悉基础知识。

      【讨论】:

        【解决方案4】:

        您可能希望使用 MDN 中记录的 Fetch API。它处理 url 请求,包括通过 HTTP 解析数据的 REST API,例如JSON 对象等。

        【讨论】:

        • fetch API 不是由 MDN 创建的,fetch API 不知道协议(它不“遵循 REST”),它支持任何 HTTP 负载,而不仅仅是 JSON跨度>
        • 感谢指正,我已经修改了。
        猜你喜欢
        • 2022-06-28
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 2018-02-15
        • 2019-01-26
        • 2016-10-15
        • 1970-01-01
        • 2020-11-16
        相关资源
        最近更新 更多