搜尋
首頁web前端前端問答react後端請求資料怎麼實現

react後端請求資料的實作方法:1、在package.json中設定「 "proxy":"http://localhost:5000"」;2、在src目錄下建立「setupProxy.js 」檔案;3、呼叫「setupProxy.js」中配置的功能,程式碼如「createProxyMiddleware('/api2',{target:...}」。

react後端請求資料怎麼實現

#本教學操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react後端請求資料怎麼實作?

    react -ajax請求後台資料方法

react-ajax

axios

  • 方法一:在package.json中設定

     "proxy":"http://localhost:5000"
  • 這樣localhost:5000就是我們要代理到的伺服器

    <pre class="brush:php;toolbar:false">  getStudentData = () =&gt; {     axios.get('/students').then(       (result) =&gt; { console.log(result.data); },       (reason) =&gt; { console.log(reason); })   }</pre>

    取得
  • localhost:5000
  • 中/students的資料

    ##**優點:**設定簡單,前端請求資源不需要任何前綴
  • **缺點:**不能配置多個代理伺服器
  • #方法二:在src目錄下建立setupProxy.js檔案

第一步:webpack配置了呼叫setupProxy.js中配置的功能

  • #setupProxy.js

  • 第二步:設定

//const proxy=require("http-proxy-middleware")   :视频中请求的包,引用它出现了无法访问的问题//应该使用以下写法*******const { createProxyMiddleware } = require("http-proxy-middleware");module.exports=function(app){
    app.use(
        createProxyMiddleware('/api1',{//遇见/api1前缀的请求,就会触发该代理配置
            target:"http://localhost:5000",//请求转发给谁
            changeOrigin:true,//控制服务器收到的请求头中Host字段的值:host就是主机名+端口号
            	//true:后端接收到的host:localhost:5000
            	//false:后端接收到的host:localhost:3000
            	//系统默认为false,一般会设为true
            pathRewrite:{"^/api1":""}//重写请求路径(必须要写)
            //不写:后台接收到的请求路径:/api1/student
            //写了:后台请求的路径:/student
        }),
        createProxyMiddleware('/api2',{
            target:"http://localhost:5001",
            changeOrigin:true,
            pathRewrite:{"^/api2":""}
        }),
    )}
  • 解決問題連結:https://www.csdn.net/tags/OtTaIg0sNzE3OC1ibG9n.html

  • 跨網域請求真實介面案例

    #App.jsx

    import React, { Component } from 'react'
    import Search from './components/Search'
    import List from './components/List'
    import './App.css'
    
    export default class App extends Component {
    state={users:[]}
    getSearchResult=(result)=>{
      this.setState({users:result})
    }
    
      render() {
        return (
          <div>
            <search></search>
            <list></list>
          </div>
        )
      }
    }
    Search.jsx
    import React, { Component } from 'react'
    import axios from 'axios'
    import './index.css'
    
    export default class Search extends Component {
    
      search = () => {
        //获取输入框中的值
        const { value } = this.keyWordElement;
        //发送请求
        axios.get(`/api1/search/users?q=${value}`).then(
          result => {
            this.props.getSearchResult(result.data.items)
          },
          reason => {
            console.log(reason);
          })
      }
    
    
    
      render() {
        return (
          <section>
            <h3 id="搜索github用户">搜索github用户</h3>
            <div>
              <input> this.keyWordElement = c} type="text" placeholder="enter the name you search" /> <button>搜索</button>
            </div>
          </section>
        )
      }
    }
  • #List.jsx

    import React, { Component } from 'react'
    
    import './index.css'
    export default class List extends Component {
      render() {
        return (
          <div>
            {this.props.users.map(item=>{
                return    <div>
                    <a>
                      <img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/020/8311c35cd4729255aa36862f92c15493-0.png?x-oss-process=image/resize,p_40" class="lazy" alt="react後端請求資料怎麼實現" >
                    </a>
                    <p>{item.login}</p>
                  </div>
            })}
      
           
          </div>  
        )
      }
    }

    react後端請求資料怎麼實現

    ' react-任意元件間的通訊

    訊息訂閱與發布機制
    • #PubSubJs:
    • pub:( publish)發布
    • sub:(subscribe)訂閱

    react後端請求資料怎麼實現

    #pubsub-js

    :就是用來實現發布訂閱的,可以把它看過vue中的eventBus,看作是函數的載體

    訂閱方:建立一個函數,並且將這個函數傳給pubsub做託管
  • var token=PubSub.subscribe("myTopic",myFunction[托管的函数])//token,是当前订阅函数的唯一id,可以用来取消订阅
    ## ###########發佈者:發佈的意思是透過呼叫訂閱方指定的函數,實作傳參或執行操作功能#########
    PubSub.publish('myTopic','需要发送给订阅者的内容')
    ####### ###########第一步###:新增pubsub-js#########
    yarn add pubsub-js
    #########**第二步:**在元件中導入#########
    import PubSub from 'pubsub-js'
    #########**第三步:**呼叫PubSub訂閱函式(一般是在componentDidMount鉤子函式中訂閱)####### ###
      componentDidMount(){
        this.token=PubSub.subscribe("changeState",this.changeStateObj)
      }
    ###############demo#############List.jsx###
    import React, { Component } from 'react'
    import PubSub from 'pubsub-js'
    import './index.css'
    export default class List extends Component {
      state={
        users:[],//拿到的用户信息
        isFirst:true,//是否第一次访问
        isLoading:false,//是否正在加载
        err:"",//返回的错误信息
      
      }
    
      changeStateObj=(msg,value)=>{
        this.setState(value)
      }
    
      componentDidMount(){
        this.token=PubSub.subscribe("changeState",this.changeStateObj)
      }
      componentWillUnmount(){
        PubSub.unsubscribe(this.token)
      }
     
      render() {
        let {users,isFirst,isLoading,err}=this.state
        return (
          
            {           isFirst?

    输入搜索内容搜索用户

    :           isLoading?

    Loading...

    :           err?

    {err}

    :                    users.map(item=>{             return    
                                       react後端請求資料怎麼實現                                  

    {item.login}

                  
            })}                  
           )   } }
    #########Search. jsx###
    import React, { Component } from 'react'
    import axios from 'axios'
    import './index.css'
    import PubSub from 'pubsub-js'
    
    export default class Search extends Component {
      
    
      search = () => {
        //获取输入框中的值
        const { value } = this.keyWordElement;
        PubSub.publish('changeState',{isFirst:false,isLoading:true})
        //发送请求
        axios.get(`/api1/search/users2?q=${value}`).then(
          result => {
            PubSub.publish('changeState',{isLoading:false,users:result.data.items})
    
          },
          reason => {
            PubSub.publish('changeState',{isLoading:false,err:reason.message})
    
          })
      }
    
    
    
      render() {
        return (
          <section>
            <h3 id="搜索github用户">搜索github用户</h3>
            <div>
              <input> this.keyWordElement = c} type="text" placeholder="enter the name you search" /> <button>搜索</button>
            </div>
          </section>
        )
      }
    }
    #########App.jsx###
    import React, { Component } from 'react'
    import Search from './components/Search'
    import List from './components/List'
    import './App.css'
    
    export default class App extends Component {
    
    
    
      render() {
        return (
          <div>
            <search></search>
            <list></list>
          </div>
        )
      }
    }
    #########發送ajax請求的方式有哪些? #########xhr:xmlHttpRequest:傳統的ajax######jQuery:封裝了xhr######axios:封裝了xhr############# **fetch(取)?*window內建的,不用借用第三方函式庫,直接使用######缺點:目前不是很好用,沒有要求發送攔截器########## ###########xhr######################fetch################ :相容性不高#########優點###:沒用xhr,不用安裝第三方函式庫,原生#################### ####fetch最佳寫法###
    let getData=async()=>{	
    	try{
            let result=await fetch(url);
            let data=await result.json();
        }catch(error){
            console.log('请求错误',error)
        }
    }
    推薦學習:《###react影片教學###》             ##########

    以上是react後端請求資料怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    react中canvas的用法是什么react中canvas的用法是什么Apr 27, 2022 pm 03:12 PM

    在react中,canvas用于绘制各种图表、动画等;可以利用“react-konva”插件使用canvas,该插件是一个canvas第三方库,用于使用React操作canvas绘制复杂的画布图形,并提供了元素的事件机制和拖放操作的支持。

    react中antd和dva是什么意思react中antd和dva是什么意思Apr 21, 2022 pm 03:25 PM

    在react中,antd是基于Ant Design的React UI组件库,主要用于研发企业级中后台产品;dva是一个基于redux和“redux-saga”的数据流方案,内置了“react-router”和fetch,可理解为应用框架。

    React是双向数据流吗React是双向数据流吗Apr 21, 2022 am 11:18 AM

    React不是双向数据流,而是单向数据流。单向数据流是指数据在某个节点被改动后,只会影响一个方向上的其他节点;React中的表现就是数据主要通过props从父节点传递到子节点,若父级的某个props改变了,React会重渲染所有子节点。

    react中为什么使用nodereact中为什么使用nodeApr 21, 2022 am 10:34 AM

    因为在react中需要利用到webpack,而webpack依赖nodejs;webpack是一个模块打包机,在执行打包压缩的时候是依赖nodejs的,没有nodejs就不能使用webpack,所以react需要使用nodejs。

    react中forceupdate的用法是什么react中forceupdate的用法是什么Apr 19, 2022 pm 12:03 PM

    在react中,forceupdate()用于强制使组件跳过shouldComponentUpdate(),直接调用render(),可以触发组件的正常生命周期方法,语法为“component.forceUpdate(callback)”。

    react是组件化开发吗react是组件化开发吗Apr 22, 2022 am 10:44 AM

    react是组件化开发;组件化是React的核心思想,可以开发出一个个独立可复用的小组件来构造应用,任何的应用都会被抽象成一颗组件树,组件化开发也就是将一个页面拆分成一个个小的功能模块,每个功能完成自己这部分独立功能。

    react和reactdom有什么区别react和reactdom有什么区别Apr 27, 2022 am 10:26 AM

    react和reactdom的区别是:ReactDom只做和浏览器或DOM相关的操作,例如“ReactDOM.findDOMNode()”操作;而react负责除浏览器和DOM以外的相关操作,ReactDom是React的一部分。

    react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

    react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    2 週前By尊渡假赌尊渡假赌尊渡假赌
    倉庫:如何復興隊友
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    4 週前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)