You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Flask后端处理结果在React前端展示?

在React前端展示Flask后端的处理结果

没问题!我来帮你搞定这个事儿,分两步走:先调整下你的Flask后端代码,让它返回实际处理后的结果,再写React前端的请求和展示逻辑。

第一步:调整Flask后端代码

你当前的后端只返回了测试消息hi hello,得把实际处理好的data结果传回去,修改result函数的返回部分就行:

from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import sys
import escode

app = Flask(__name__)
CORS(app)

@app.route('/result', methods = ['GET','POST'])
def result():
    SearchData = request.get_json()
    results = escode.retrieve_results( SearchData['MaskList'][0]['SpecChar'] )
    data = [doc for doc in results['hits']['hits']]
    for doc in data:
        print("(%s) %s"% (doc['_id'], doc['_source']['Name']), file=sys.stderr)
    # 这里改成返回处理后的结果
    return jsonify({ 
        'msg': '请求成功',
        'results': data  # 把你的搜索结果数据传回去
    }), 200

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

第二步:React前端发送请求并展示结果

这里给你两种常用的实现方式,选一种你习惯的就行:

方式一:用原生fetch API

在React组件里发送POST请求,拿到结果后用状态管理来渲染展示:

import { useState } from 'react';

function SearchResultComponent() {
  // 用状态存储后端返回的结果
  const [searchResults, setSearchResults] = useState([]);
  // 模拟你要发送的MaskList数据(实际项目里可以从输入框等地方获取)
  const targetMaskList = [{ SpecChar: '要搜索的字符' }];

  // 定义发送请求的函数
  const fetchResults = async () => {
    try {
      const response = await fetch('http://localhost:5000/result', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        // 把数据转成JSON字符串发送
        body: JSON.stringify({ MaskList: targetMaskList }),
      });

      if (!response.ok) {
        throw new Error('请求失败,请稍后重试');
      }

      const responseData = await response.json();
      // 更新状态,触发组件重新渲染展示结果
      setSearchResults(responseData.results);
    } catch (error) {
      console.error('发送请求时出错:', error);
      alert('获取结果失败,请检查后端是否正常运行');
    }
  };

  return (
    <div className="search-container">
      <button onClick={fetchResults} style={{ padding: '8px 16px', cursor: 'pointer' }}>
        发送请求获取结果
      </button>

      <div className="results-section">
        <h3>处理结果</h3>
        {searchResults.length === 0 ? (
          <p>暂无结果,点击上方按钮获取</p>
        ) : (
          <ul style={{ listStyle: 'none', padding: 0 }}>
            {searchResults.map((doc, index) => (
              <li 
                key={index} 
                style={{ margin: '10px 0', padding: '12px', border: '1px solid #eee', borderRadius: '4px' }}
              >
                <strong>文档ID:</strong> {doc._id} <br />
                <strong>名称:</strong> {doc._source.Name}
              </li>
            ))}
          </ul>
        )}
      </div>
    </div>
  );
}

export default SearchResultComponent;

方式二:用axios库(更简洁)

先安装axios:

npm install axios

然后在组件里使用:

import { useState } from 'react';
import axios from 'axios';

function SearchResultComponent() {
  const [searchResults, setSearchResults] = useState([]);
  const targetMaskList = [{ SpecChar: '要搜索的字符' }];

  const fetchResults = async () => {
    try {
      const response = await axios.post('http://localhost:5000/result', {
        MaskList: targetMaskList
      });
      // 直接从response.data里拿结果更新状态
      setSearchResults(response.data.results);
    } catch (error) {
      console.error('请求出错:', error);
      alert('获取结果失败');
    }
  };

  return (
    <div>
      <button onClick={fetchResults}>获取搜索结果</button>
      <div style={{ marginTop: '20px' }}>
        {searchResults.length > 0 ? (
          searchResults.map((doc, idx) => (
            <div key={idx} style={{ padding: '10px', borderBottom: '1px dashed #ccc' }}>
              <p>ID: {doc._id}</p>
              <p>名称: {doc._source.Name}</p>
            </div>
          ))
        ) : (
          <p>还没有结果哦</p>
        )}
      </div>
    </div>
  );
}

export default SearchResultComponent;

注意事项

  • 确保你的Flask后端在http://localhost:5000运行(如果改了端口,前端的URL也要对应修改)
  • 后端已经配置了CORS(app),所以跨域问题不用额外担心
  • 实际项目中,targetMaskList的数据可以从用户输入表单、搜索框等地方动态获取,不用写死

内容的提问来源于stack exchange,提问作者VITTHAL BHANDARI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:27:51