• react ajax


    react ajax

    前置说明
    1) React本身只关注于界面, 并不包含发送ajax请求的代码
    2) 前端应用需要通过ajax请求与后台进行交互(json数据)
    3) react应用中需要集成第三方ajax库(或自己封装)

    常用的ajax请求库
      1) jQuery: 比较重, 如果需要另外引入不建议使用
      2) axios: 轻量级, 建议使用
        a. 封装XmlHttpRequest对象的ajax
        b. promise风格
        c. 可以用在浏览器端和node服务器端
    3) fetch: 原生函数, 但老版本浏览器不支持
        a. 不再使用XmlHttpRequest对象提交ajax请求
        b. 为了兼容低版本的浏览器, 可以引入兼容库fetch.js

    axios:

    文档:https://github.com/axios/axios

    相关API:

    //get
    axios.get('/user?ID=12345')
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
    
    axios.get('/user', {
        params: {
          ID: 12345
        }
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
    
    //post
    axios.post('/user', {
        firstName: 'Fred',
        lastName: 'Flintstone'
    })
    .then(function (response) {
      console.log(response);
    })
    .catch(function (error) {
      console.log(error);
    });

    Fetch

    文档:

    1)         https://github.github.io/fetch/

    2)         https://segmentfault.com/a/1190000003810652

    相关API:

    //get
    fetch(url).then(function(response) {
      return response.json()
    }).then(function(data) {
      console.log(data)
    }).catch(function(e) {
      console.log(e)
    });
    
    
    //post
    fetch(url, {
      method: "POST",
      body: JSON.stringify(data),
    }).then(function(data) {
      console.log(data)
    }).catch(function(e) {
      console.log(e)
    })

     例子:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript" src="../js/react.development.js"></script>
        <script type="text/javascript" src="../js/react-dom.development.js"></script>
        <script type="text/javascript" src="../js/prop-types.js"></script>
        <script type="text/javascript" src="../js/babel.min.js"></script>
        <script type="text/javascript" src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>
    </head>
    <body>
    <div id="example"></div>
    <script type="text/babel">
       
      /*
      需求:
        1. 界面效果如下
        2. 根据指定的关键字在github上搜索匹配的最受关注的库
        3. 显示库名, 点击链接查看库
        4. 测试接口: https://api.github.com/search/repositories?q=r&sort=stars
      */
    
      class MostStarRepo extends React.Component {
        constructor (props) {
          super(props)
          this.state = {
            repoName: '',
            repoUrl: ''
          }
        }
        
        componentDidMount () {
          const url = `https://api.github.com/search/repositories?q=${this.props.searchWord}&sort=stars`
          // const url = `https://api.github.com/search/repositories2?q=${this.props.searchWord}&sort=stars`
          axios.get(url)
            .then(response => {
              const result = response.data
              console.log(result)
              const repo = result.items[0]
              this.setState({
                repoName: repo.name,
                repoUrl: repo.html_url
              })
            })
            .catch(error => {
              // debugger
              console.log(error)
              alert('请求失败 '+ error.message)
            })
    
          /*fetch(url, {method: "GET"})
            .then(response => response.json())
            .then(data => {
              console.log(data)
              if(data.message) {
                alert(`请求失败: ${data.message}`)
              } else {
                const repo = data.items[0]
                this.setState({
                  repoName: repo.name,
                  repoUrl: repo.html_url
                })
              }
            })*/
        }
    
        render () {
          const {repoName, repoUrl} = this.state
          if(!repoName) {
            return <h2>loading...</h2>
          } else {
            return (
              <h2>
                most star repo is <a href={repoUrl}>{repoName}</a>
              </h2>
            )
          }
        }
      }
    
      ReactDOM.render(<MostStarRepo searchWord="r"/>, document.getElementById('example'))
    
    </script>
    </body>
    </html>
  • 相关阅读:
    gerrit 修改前一次提交的方法(转载)
    数据结构实验之图论六:村村通公路 【克鲁斯卡尔算法】
    数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
    数据结构实验之图论四:迷宫探索【dfs 求路径】
    Java 【打印俄文的英文字母】
    【留给自己的独白,长大了】
    Java 【 ArrayList应用 】 (SDUT 4069 C~K的班级)
    你的勇气去哪里了
    Java的 「 “ 结构体 ”」 与 「 “ 自定义排序 ” 」
    Java 中的 SimpleDateFormat 【 parse 和 format 】【转换时间格式】
  • 原文地址:https://www.cnblogs.com/jnba/p/12551465.html
Copyright © 2020-2023  润新知