ant design pro调接口

本文详细介绍了Ant Design Pro中从View层到反向代理的接口调用过程。在View层,通过connect连接Model层并使用dispatch调用Model层的异步方法。Model层定义了namespace和effects,通过getDictType接口与Api接口层交互。Api接口层设置反向代理,而在反向代理配置中,将http://192.168.1.21:8080映射为/aaa路径。

View层<===Model层<===Api 接口层<===反向代理
**

View层

**

  1. 使用connect链接model层
  2. 调用dispatch获取 add 下异步 Kan方法(Kan是设置在Model层的方法)
  3. 使用payload传递请求参数
  4. then会返回你所请求的值
  5. 使用Setstate放入state
  6. 在需要的地方遍历输出
import React from 'react';
import { Breadcrumb, Table, Row, Col, DatePicker, Button, Form, Select } from 'antd';
import { connect } from 'dva';

const { Option } = Select;

@Form.create()//使用from表单时 需要添加

@connect(({add})=>({
  add
}))

class Examine extends React.Component {
  constructor(props){
    super(props);
    this.state={
      list:[],
    }
  }

  componentDidMount(){
    const { dispatch } = this.props;
    dispatch({
      type: 'add/Kan',
      payload: {
       code:"022"
      },
    }).then((res)=>{
      console.log(res,"我是请求数据");
      this.setState({
        list:res
      })
    })
  }
  render() {
    return (
      <div>
        <Form style={{ backgroundColor: "#fff", paddingTop: "30px", marginTop: "20px" }}>
          <Row>
            <Col span={5}>
              <Form.Item label="部门">
                {getFieldDecorator('departmentNum', {
                  rules: [{ required: true, message: 'Please select your gender!' }],
                })(
                  <Select placeholder="选择">
                    {this.state.list.map((Item, index, array) => {
                      return <Option key={index} value={Item.departmentNo}>{Item.departmentNo}</Option>
                    })}
                  </Select>
                )}
              </Form.Item>
            </Col>
          </Row>
        </Form>

      </div>
    )
  }
}
export default Examine;

**

Model层

**
namespace是数据层的命名 此Model层名为add,,对应View层的第2步。
先异步effects再同步reducers。
import { getDictType } from ‘@/services/api’; 是调用对应api链接

import { routerRedux } from 'dva/router';
import { stringify } from 'qs';
import { getDictType } from '@/services/api';
import { setAuthority } from '@/utils/authority';
import { getPageQuery } from '@/utils/utils';
import { reloadAuthorized } from '@/utils/Authorized';

export default {
    namespace: 'add',

    state: {
        status: undefined,
    },
    effects: {
        //查询状态 传022
        *Kan({ payload }, { call, put }) {
            const response = yield call(getDictType, payload);
            yield put({ type: 'save', payload: { ...response } });
            return response;//return是将数据回调 在.then中可获取回调的数据并进行操作,但是这会使页面看起来不规范,所以一般都是在const response = yield call(getDictType, payload);下直接对response进行数据操作
        },
    },
    reducers: {
        save(state, { payload }) {
            return {
                ...state,//防止覆盖其他reducers函数返回的state
                ...payload,
            };
        },
    },
}

**

Api 接口层

**
/aaa为反向代理

import { stringify } from 'qs';
import request from '@/utils/request';

//查询状态 传022
export async function getDictType(params) {
  return request(`/aaa/dict/getDictType`, {
    method: 'POST',
    data: {
      ...params,
    },
  });
}

**

反向代理

**
在ant pro中,此操作在config.js中。将http://192.168.1.21:8080赋值给/aaa。
/aaa不是固定的 (根据自己的需求改写,但是必须和接口层一样)。

proxy: {
    '/aaa': {
      target: 'http://192.xxx.xx.xx:8080',
      changeOrigin: true,
      pathRewrite: { '^/aaa': '' },
    },
  },
<think>好的,用户想了解如何将Ant Design Pro与后端接口进行整合。我需要先回顾一下Ant Design Pro的基本结构,特别是它如何处理前后端通信。根据引用[5],Ant Design Pro使用React,并且提到了前后端分离的技术栈,比如SpringBoot和Mybatis。这可能意味着后端可以是任何RESTful API服务,而前端通过HTTP请求与后端交互。 首先,用户可能需要知道如何在Ant Design Pro中配置代理,解决跨域问题。在本地开发时,前端通常运行在localhost:3000或类似端口,而后端可能在另一个端口,比如8080。这时候需要在config/proxy.ts中设置代理,将API请求转发到后端服务器。例如,将/api开头的请求代理到http://localhost:8080。引用[3]提到Vue脚手架使用devtools,但Ant Design Pro可能使用webpack-dev-server的代理配置,类似原理。 接下来,用户需要知道如何创建服务层来用API。Ant Design Pro通常使用umi-request或者axios进行HTTP请求。在src/services目录下创建service文件,定义异步函数用后端接口。比如,使用umi-request的get和post方法,并处理响应数据。这部分需要示例代码,展示如何封装API请求。 然后是页面组件如何用这些服务。用户可能需要在页面组件中导入service模块,使用useEffect或类似的生命周期钩子来触发数据获取,并将数据存入state,再渲染到界面。例如,在React函数组件中使用useState和useEffect来管理数据和副作用。引用[5]提到使用props传递数据,可能需要说明如何将后端返回的数据传递给子组件。 此外,用户可能关心如何处理认证,比如JWT。Ant Design Pro内置了权限管理,可以在src/utils/authority中处理token的存储和获取。在请求拦截器中添加Authorization头,携带JWT token。这部分需要示例如何修改请求拦截器,自动附加token。 还需要考虑错误处理,比如全局拦截响应,处理401未授权等情况,跳转到登录页面。在service层统一处理错误,提示用户相关信息。可能需要在示例代码中包含错误处理的逻辑。 另外,引用[4]提到Jeecg-Boot整合了Ant Design Pro,说明可能有现成的后端整合方案,但用户可能需要通用的方法,而不仅仅是特定框架。因此,示例应保持通用性,适用于任何后端API。 最后,用户可能需要示例代码的结构,比如服务层、代理配置、页面用等步骤。确保代码符合Ant Design Pro的项目结构,比如services目录的位置,代理配置文件的修改位置。 总结步骤:配置代理 → 创建服务层 → 页面用服务 → 处理认证和错误。需要提供每一步的代码示例和解释,确保用户能逐步整合后端接口。</think>### Ant Design Pro 后端接口整合教程 #### 一、配置代理(解决跨域问题) 在本地开发环境中,需在`config/proxy.ts`中配置代理,将API请求转发到后端服务器: ```typescript export default { dev: { '/api/': { target: 'http://localhost:8080', // 后端接口地址 changeOrigin: true, pathRewrite: { '^/api': '' }, // 移除路径中的/api前缀 }, }, }; ``` 配置后,前端访问`/api/user`将被代理到`http://localhost:8080/user`[^3] #### 二、创建服务层 1. 在`src/services`目录新建`userService.ts`: ```typescript import request from 'umi-request'; // 定义接口响应类型 interface User { id: number; name: string; } // 获取用户列表 export async function fetchUsers(params?: any): Promise<User[]> { return request('/api/users', { method: 'GET', params, }); } // 提交表单数据 export async function submitForm(data: any) { return request('/api/submit', { method: 'POST', data, }); } ``` #### 三、页面用示例 在React组件中使用服务: ```typescript import React, { useState, useEffect } from 'react'; import { fetchUsers } from '@/services/userService'; const UserList: React.FC = () => { const [users, setUsers] = useState<User[]>([]); useEffect(() => { const loadData = async () => { try { const response = await fetchUsers(); setUsers(response); } catch (error) { console.error('数据加载失败:', error); } }; loadData(); }, []); return ( <Table dataSource={users} columns={[ { title: 'ID', dataIndex: 'id' }, { title: '姓名', dataIndex: 'name' } ]} /> ); }; ``` #### 四、认证处理(JWT示例) 1. 在`src/utils/request.ts`中添加拦截器: ```typescript export const authRequest = async (url: string, options: any) => { const token = localStorage.getItem('token'); return request(url, { ...options, headers: { ...options.headers, Authorization: `Bearer ${token}`, }, }); }; ``` #### 五、错误处理 ```typescript // 全局响应拦截 request.interceptors.response.use( (response) => { if (response.status >= 200 && response.status < 300) { return response.data; } throw new Error('请求失败'); }, (error) => { if (error.response.status === 401) { history.push('/login'); } return Promise.reject(error); } ); ``` #### 六、整合Spring Boot示例 后端控制器示例(Java): ```java @RestController @RequestMapping("/api") public class UserController { @GetMapping("/users") public ResponseEntity<List<User>> getUsers() { return ResponseEntity.ok(userService.findAll()); } @PostMapping("/submit") public ResponseEntity<?> submitForm(@RequestBody FormData data) { // 处理表单数据 return ResponseEntity.ok().build(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值