React中使用proxy代理解决跨域问题

跨域代理

在React中需要自行安装插件实现跨域代理

①安装代理插件

项目根目录下执行

npm i http-proxy-middleware

②建立配置文件

// src/setupProxy.js 文件路径  名称和路径要严格一致
​
const { createProxyMiddleware } = require("http-proxy-middleware");
module.exports = function (app) {
  // 插件使用方式
  // 代理配置段 代理多个段 多个app.use
  app.use(
    createProxyMiddleware("/douyu", {
      target: "https://m.douyu.com",
      changeOrigin: true,
      secure: true,
      pathRewrite: {
        "^/douyu": "",
      },
    })
  );
};

③进行页面渲染

import React, { Component } from "react";
import "./App.css";
export default class App extends Component {
  state = { data: null };
  componentDidMount() {
    this.getData();
  }
  // 数据请求方法
  getData(page=1) {
    // const url = "https://m.douyu.com/api/room/list?page=1&type=yz";
    const url = "/douyu/api/room/list?page=" + page + "&type=yz";
    // 第一段 地址参数
    // 第二段 res返回数据  格式化为json对象
    fetch(url)
      .then((res) => res.json())
      .then((res) => {
        console.log(res);
        this.setState({ data: res.data });
      });
  }
  // 拼接渲染
  show = () =>
    this.state.data.list.map((item, index) => (
      <div key={index} className="douyu-cell">
        <div>
          <img src={item.roomSrc} />
          <div>{item.hn}</div>
          <div>{item.nickname}</div>
        </div>
        <div>{item.roomName}</div>
      </div>
    ));
  render() {
    // 判断当异步请求数据 没有返回前不去渲染页面
    if (this.state.data === null) return <div></div>;
    // 获取当前页和最大页数
    const { nowPage, pageCount } = this.state.data;
    return (
      <div>
        <button
          onClick={this.getData.bind(this, nowPage - 1)}
          disabled={nowPage == 1}
        >
          上一页
        </button>
        <button
          onClick={this.getData.bind(this, nowPage + 1)}
          disabled={nowPage == pageCount}
        >
          下一页
        </button>
        {this.show()}
      </div>
    );
  }
}
​

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abssss1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值