React AJAX 簡單演示

来源:https://www.cnblogs.com/chenyingying0/archive/2020/04/14/12698047.html
-Advertisement-
Play Games

React 組件的數據可以通過 componentDidMount 方法中的 Ajax 來獲取,當從服務端獲取數據時可以將數據存儲在 state 中,再用 this.setState 方法重新渲染 UI。當使用非同步載入數據時,在組件卸載前使用 componentWillUnmount 來取消未完成的 ...


React 組件的數據可以通過 componentDidMount 方法中的 Ajax 來獲取,當從服務端獲取數據時可以將數據存儲在 state 中,再用 this.setState 方法重新渲染 UI。
當使用非同步載入數據時,在組件卸載前使用 componentWillUnmount 來取消未完成的請求。

 

下麵這個案例用到了jQuery,所以安裝jQuery先

npm i jquery -S

引入jQuery

import $ from  'jquery'
import React, { Component,Fragment } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import $ from  'jquery';

class User extends Component{
  constructor(props){
    super(props);
    this.state={
      username:'',
      userUrl:''
    }
  }

  //組件掛載完成後
  componentDidMount(){
    this.myAjax=$.get(this.props.source,res=>{
      var lastGist=res[0];
      console.log(lastGist);
      this.setState({
        username:lastGist.owner.login,
        userUrl:lastGist.html_url
      })
    })
  }

  //組件將要卸載前
  componentWillUnmount(){
    //取消未完成的請求
    this.myAjax.abort();
  }

  render(){
    return(
      <Fragment>
        <div>用戶賬號:{this.state.username}</div>
        <a href={this.state.userUrl}>用戶網址:{this.state.userUrl}</a>
      </Fragment>
    )
  }
}

  ReactDOM.render(
    <div>
       <User source="https://api.github.com/users/octocat/gists" />  
    </div>,
    document.getElementById('example')
  );

serviceWorker.unregister();

 

 

可以使用之前知識列出所有條目

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import $ from  'jquery';

class User extends Component{
  constructor(props){
    super(props);
    this.state={
      username:[],
      userUrl:[]
    }
  }

  //組件掛載完成後
  componentDidMount(){
    this.myAjax=$.get(this.props.source,res=>{
      var lastGist=res;
      var usernames=[];
      var userUrls=[];

      lastGist.map(
        function proc(item){
          usernames.push(item.owner.login);
          userUrls.push(item.html_url);
          return item;
        }
      )

      this.setState({
        username:usernames,
        userUrl:userUrls
      })
    })
  }

  //組件將要卸載前
  componentWillUnmount(){
    //取消未完成的請求
    this.myAjax.abort();
  }

  render(){
    var names=this.state.username;
    var urls=this.state.userUrl;
    return(
      <ul>
        {
          names.map(
            function(item,index){
              return(
                <div key={index}>
                  <li>{item}</li>
                  <a href={urls[index]} rel="nofollow">{urls[index]}</a>
                </div>
              )
            }
          )
        }
      </ul>
    )
  }
}

  ReactDOM.render(
    <div>
       <User source="https://api.github.com/users/octocat/gists" />  
    </div>,
    document.getElementById('example')
  );

serviceWorker.unregister();

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 眾所周知,Vue 2.x 的數據綁定是通過 defineProperty。而在 Vue 3.x 的設計中,數據綁定是通過 Proxy 實現的,這兩者到底有何異同? 一、definePropety defineProperty 是 Object 的一個方法,可以在對象上新增或編輯某個屬性,可編輯的內容 ...
  • 實例:獲取button元素離頁面頂部的距離 ref寫在html元素上 import React,{Component,Fragment} from 'react'; import Child from './Child'; class Counter extends Component{ const ...
  • 1. var p1 = new Promise((resolve, reject) => { }); var p2 = p1.then( result => { }, error => { } ); //可以看到p1和p2都是promise,還可以看到狀態 console.log(p1); cons ...
  • React添加事件,和DOM上添加事件類似,但又有細微的不同. React添加事件,需要註意: 1.React的事件命名採用小駝峰(camelCase)的命名方式,DOM採用的是純小寫的方式; 2.使用JSX語法時,需要傳入一個函數作為事件的處理函數,DOM傳入的是一個字元串(雖然DOM中傳入的事件 ...
  • 我現在學bootstrap是不是太遲了哈哈哈 先來個小案例熟悉下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo1</title> <link rel="stylesheet" href="http ...
  • 匿名函數是沒有函數名的,不能單獨使用; 立即執行函數是基於匿名函數實現的,也沒有函數名,會在定義後立即執行; 閉包是有權訪問另一個函數作用域中的變數的函數。匿名函數、立即執行函數只要滿足 有權訪問另一個函數作用域中的變數 這一個條件,就成了閉包。 匿名函數 匿名函數:沒有函數名的函數 匿名函數不能單 ...
  • React 支持一種非常特殊的屬性 Ref ,可以用來綁定到 render() 輸出的任何組件上 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; imp ...
  • import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import * as serviceWorker from './serviceWorker'; cl ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...