十四(AJAX)、AJAX、axios、常用请求方法(GET POST...)、HTTP协议、接口文档、form-serialize

1. AJAX介绍及axios基本使用

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>AJAX介绍及axios基本使用</title>
</head>

<!-- 
AJAX
  定义:AJAX 是异步的 JavaScript 和 XML(Asynchronous JavaScript And XML)。简单点说,就是使用
XMLHttpRequest(XHR)对象与服务器通信。它可以使用 JSON,XML,HTML 和 text 文本等格式发送和接收数据。
  概念:AJAX是一种与服务器通信的技术
-->

<body>
  <p class="province">
  <p></p>
  <!-- 数据渲染到这里 -->
  </p>
  <button class="btn">渲染省份数据</button>

  <!-- 请求库axios → 和服务器通信 -->
  <!-- 
      axios库地址: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
      省份数据地址: http://hmajax.itheima.net/api/province
      需求: 点击按钮 通过 axios 获取省份数据 并渲染
     -->
  <!-- 使用axios记得先导包 -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    const btn = document.querySelector('.btn')
    const province = document.querySelector('.province')

    btn.addEventListener('click', function () {
      axios({
        // 发请求:调用axios函数,传入配置
        url: 'http://hmajax.itheima.net/api/province'
      }).then(res => {
        // 接收并使用数据:通过点语法调用then方法,传入回调函数并定义形参(比如res)
        province.innerHTML = res.data.list.join('-')
      })
    })
  </script>
</body>

</html>

2. 认识URL

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>认识URL</title>
</head>

<!-- 
  URL定义:
    URL 代表着是统一资源定位符(Uniform Resource Locator)。
    URL 无非就是一个给定的独特资源在 Web 上的地址。
    理论上说,每个有效的 URL 都指向一个唯一的资源。
    这个资源可以是一个 HTML 页面,一个 CSS 文档,一幅图像,等等。
  URL概念:资源在网络上的地址
  URL常见组成部分:举例(http://hmajax.itheima.net/api/news)
    协议(http:)、规定了浏览器发送及服务器返回内容的格式,常见的有 http、https
    域名(hmajax.itheima.net)、域名表示正在请求网络上的哪个服务器
    资源路径(api/news)、资源在服务器的位置,资源和路径的对应关系由服务器决定
-->

<body>
  <button class="btn">获取新闻数据并输出</button>
  <!-- 1. 导包 -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <!-- 
    新闻地址:http://hmajax.itheima.net/api/news
    需求: 点击按钮 通过axios 获取新闻数据 并输出
  -->
  <script>
    axios({
      url: 'http://hmajax.itheima.net/api/news'
    }).then(res => {
      console.log(res)
      console.log(res.data)
      console.log(res.data.data)
    })
  </script>
</body>

</html>

3. URL查询参数介绍及使用

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<!-- 
  URL查询参数是提供给网络服务器的额外参数。
  这些参数是用 & 符号分隔的键/值对列表。

  查询参数的格式:?隔开之后使用&分隔的键值对列表
-->

<body>
  <button class="btn">获取城市数据并渲染</button>
  <ul>
    <!-- <li>郑州市</li> -->
  </ul>
  <!-- 1. 导包 -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <!-- 
    城市数据:http://hmajax.itheima.net/api/city
      获取某个省所有的城市
      查询参数名:pname
      说明:传递省份或直辖市名比如 北京、广东省…
      http://hmajax.itheima.net/api/city?pname=北京
    需求: 点击按钮 通过axios 获取某个省的城市 并输出
  -->
  <script>
    const btn = document.querySelector('.btn')
    const ul = document.querySelector('ul')
    btn.addEventListener('click', function () {
      axios({
        // 获取河南省所有的城市
        url: 'http://hmajax.itheima.net/api/city?pname=河南省'
      }).then(res => {
        // console.log(res)
        let str = res.data.list.map(itme => {
          return `<li>${itme}</li>`
        }).join('')
        ul.innerHTML = str
      })
    })
  </script>

</body>

</html>

案例1_报错信息百度跳转查询

  <script>
    // try catch尝试执行代码,如果出错,把报错信息发到百度去搜索
    try {
      const p = document.querySelector('p')
      p.innerHTML = 'hhh'
    } catch (error) {
      location.href = `https://www.baidu.com/s?word=${error}`
    }
  </script>

使用axios传递查询参数 params

4. 案例2_地区查询

html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例-区县查询</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="./css/index.css">
</head>

<body>
    <div class="container">
        <form class="row">
            <div class="mb-3 col">
                <label class="form-label">省份/直辖市名字</label>
                <!-- 省份输入框 -->
                <input type="text" value="北京" class="form-control province" placeholder="请输入省份名称" />
            </div>
            <div class="mb-3 col">
                <label class="form-label">城市名字</label>
                <!-- 城市输入框 -->
                <input type="text" value="北京市" class="form-control city" placeholder="请输入城市名称" />
            </div>
        </form>
        <!-- 查询按钮 -->
        <button type="button" class="btn btn-primary my-button">查询</button>
        <br><br>
        <p>地区列表: </p>
        <ul class="list-group">
            <!-- 渲染的列表项 -->
            <!-- <li class="list-group-item">东城区</li> -->
        </ul>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js"></script>
    <!-- 案例核心代码 -->
    <script src="./js/index.js"></script>
</body>

</html>

js

/*
  http://hmajax.itheima.net/api/area
  传递某个省份内某个城市的所有区县
  查询参数名:pname、cname
  pname说明:传递省份或直辖市名,比如 北京、湖北省…
  cname说明:省份内的城市,比如 北京市、武汉市…
  核心功能:查询地区,并渲染列表
*/

const province = document.querySelector(".province");
const city = document.querySelector(".city");
const myBtn = document.querySelector(".my-button");
const listGroup = document.querySelector(".list-group");

myBtn.addEventListener("click", function () {
  const pname = province.value;
  const cname = city.value;
  axios({
    // 1. & 拼接查询参数
    // url: `http://hmajax.itheima.net/api/area?pname=${province.value}&cname=${city.value}`,

    // 2. params
    url: `http://hmajax.itheima.net/api/area`,
    params: {
      /* pname: province.value,
      cname: city.value, */
      // ES6对象属性赋值的简写: 属性名和变量名相同
      pname,
      cname,
    },
  }).then((res) => {
    // console.log(res);
    let str = res.data.list
      .map((item) => {
        return `
        <li class="list-group-item">${item}</li>
      `;
      })
      .join("");
    listGroup.innerHTML = str;
  });
});

5. 常用请求方法和数据提交

params:查询参数。GET 请求; 对应query,

data:提交数据,用于设置请求体的数据。通常用于 POST、PUT 和 PATCH 请求,对应body。

6. axios错误处理

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<!-- 
  1. 常用请求方法和数据提交
   请求方法表明对服务器资源执行的操作。最为常用的是POST提交数据和GET查询数据
    GET 获取数据(默认方法)
    POST 提交数据
    PUT 修改数据(全部)
    DELETE 删除数据
    PATCH 修改数据(部分)
-->
<!-- 
  2. axios错误处理
-->

<body>
  <button class="btn">注册用户</button>
  <!-- 1. 导包 -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <!-- 
    请求地址(url):http://hmajax.itheima.net/api/register
    注册用户
    请求方法:POST
    参数:username,password
    说明:username 用户名(中英文和数字组成, 最少8位),password 密码(最少6位)
    需求:点击按钮 通过axios提交用户数据,完成用户注册
   -->
  <script>

    document.querySelector('.btn').addEventListener('click', function () {
      axios({
        // url:请求的URL地址
        url: 'http://hmajax.itheima.net/api/register',
        // method:请求的方法,GET可以省略(不区分大小写)
        method: 'post',
        // params:用于设置 URL 的查询参数。通常用于 GET 请求,因为 GET 请求通常将数据作为 URL 的一部分发送。
        // data:提交数据,用于设置请求体的数据。通常用于 POST、PUT 和 PATCH 请求,因为这些请求通常将数据作为请求体发送。
        // 注意:在接口文档上params通常对应query,data通常对应body。
        data: {
          username: 'Tom1Jerry',
          password: '123456abc'
        }
      }).then(res => {
        console.log(res.data)
        alert(res.data.message)
      }).catch(error => {
        // 在then方法的后面,通过点语法调用catch方法,传入回调函数并定义形参
        // 失败的结果
        console.log(error)
        alert(error.response.data.message)
      })
    })

    axios({
      // 请求选项
    }).then(res => {
      // 处理数据
    }).catch(err => {
      // 处理错误
    })
    // status:200,statusText:'OK' 发请求成功
    // status:400 服务器报错 404页面没找到 catch抓错
  </script>

</body>

</html>

7. HTTP协议-请求报文

8. HTTP协议-响应报文

<!-- 
  2XX 表示成功
  3XX 表示重定向
  4XX 表示客户端错误
  5XX 表示服务端错
  ​
  常见的状态码:
  200 最喜欢见到的状态码,表示请求成功
  301 永久重定向
  302 临时重定向
  304 自上次请求,未修改的文件
  400 错误的请求
  401 未被授权,需要身份验证,例如token信息等等
  403 请求被拒绝
  404 资源缺失,接口不存在,或请求的文件不存在等等
  500 服务器端的未知错误
  502 网关错误
  503 服务暂时无法使用
-->

9. 接口文档

<body>
  <button class="btn">用户登录</button>
  <!-- 1. 导包 -->
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

  <!-- 
    接口文档:由后端提供的描述接口的文章
    接口:使用AJAX和服务器通讯时,使用的 URL,请求方法,以及参数
  -->
  <script>
    document.querySelector('.btn').addEventListener('click', function () {
      axios({
        url: 'https://hmajax.itheima.net/api/login',
        method: 'post',
        data: {
          username: 'Tom1Jerry',
          // password: '123456abc'
          password: '123456ac'
        }
      }).then(res => {
        console.log(res)
        alert(res.data.message)
      }).catch(error => {
        alert(error.response.data.message)
      })
    })
  </script>

</body>

常见的接口管理平台

企业在进行软件开发时,通常会使用接口管理平台来帮助管理和维护应用程序接口(API)。这些平台可以帮助开发者设计、测试、部署和监控 API,从而提高开发效率和软件质量。以下是一些常用的接口管理平台:

1. Postman:Postman 是一款广泛使用的 API 开发和测试工具,它支持多种 HTTP 方法和自定义请求头,可以方便地发送各种类型的请求。Postman 还提供了丰富的功能,如接口文档生成、接口测试脚本编写、接口监控、Mock 服务器等。

2. Swagger:Swagger 是一款开源的 API 设计工具,它可以帮助开发者设计、构建、记录和使用 RESTful API。Swagger 提供了一种易于理解的 API 设计语言,可以生成可读性强的 API 文档。

3. YApi:YApi 是一款由去哪儿网开源的、面向接口开发的、功能强大的、易于上手的开源接口管理工具。它提供接口的管理、测试、mock、监控等功能,可以大大提高开发效率。

4. Apifox:Apifox 是一款出色的 API 设计和管理工具,主要服务于 API 的开发、测试、模拟、文档生成和团队协作等需求。

5. Eolinker: Eolinker是一个专业的API管理平台,旨在帮助开发团队更好地设计、开发和管理API。它提供了一系列功能和工具,以简化API的创建、文档编写、测试、版本管理和安全控制等任务。

10. 案例3-用户登录

document.querySelector(".btn-login").addEventListener("click", function () {
  const username = document.querySelector(".username").value;
  const password = document.querySelector(".password").value;
  axios({
    url: "https://hmajax.itheima.net/api/login",
    method: "post",
    data: {
      username,
      password,
    },
  })
    .then((res) => {
      if (res.status == 200) {
        myAlert(res.data.message, true);
      }
    })
    .catch((error) => {
      // console.log(error);
      myAlert(error.response.data.message, false);
    });
});

11. form-serialize插件

<body>
  <form action="javascript:;" class="example-form">
    <input type="text" name="uname" />
    <br>
    <input type="text" name="pword" />
    <br>
    <input type="submit" class="submit" value="提交" />
  </form>
  <!-- 1. 导包 -->
  <script src="./lib/form-serialize.js"></script>
  <script>
    /*
      form-serialize 快速收集表单元素的值
      1. 表单元素需要设置name属性,会成为对象的属性名
      2. name属性设置的值和接口文档一致即可
      3. hash 设置生成的数据格式
        - true:js对象(常用)
        - false:查询字符串
      4. empty 是否收集空数据
        - true:收集空数据,保证格式和表单一致(推荐用法)
        - false:不收集空数据,格式和表单不一定一致(不推荐)

      const form = document.querySelector('.example-form')
      const data = serialize(form, { hash: true, empty: true })
    */

    document.querySelector('.submit').addEventListener('click', function () {
      const form = document.querySelector('.example-form')
      const data = serialize(form, { hash: true, empty: true })
      console.log(data)
    })
  </script>
</body>

12. 案例4-用户登录(整合form-serialize)

document.querySelector(".btn-login").addEventListener("click", function () {
  const form = document.querySelector("form");
  const data = serialize(form, { hash: true, empty: true });
  axios({
    url: "https://hmajax.itheima.net/api/login",
    method: "post",
    data,
  })
    .then((res) => {
      if (res.status == 200) {
        // myAlert(res.data.message, true);
        alert(res.data.message);
      }
    })
    .catch((error) => {
      // console.log(error);
      // myAlert(error.response.data.message, false);
      alert(error.response.data.message);
    });
});

13. 作业

13.1 问答机器人

  <script>
    // 获取机器人回答消息 - 接口地址: http://hmajax.itheima.net/api/robot
    // 查询参数名: spoken
    // 查询参数值: 我说的消息

    /*
      在输入框中输入信息,点击发送或者按回车键能够将发送消息展示到页面
      发送消息以后,机器人回复消息并将其展示到页面上
    */
    /* 
      思路分析
      发送消息
      1.1 绑定点击事件
      1.2 绑定keyup事件
      展示发送信息
      2.1 获取输入框内容,并显示到页面上
      2.2 清空输入框内容
      2.3 让滚动条始终在底部
      展示机器人回复信息
      3.1 调用接口, 获取机器人返回消息
      3.2 把机器人消息设置到页面上
      3.3 让滚动条始终在底部
    */
    const chatInput = document.querySelector('.chat_input')
    const chatList = document.querySelector('.chat_list')
    const chatDiv = document.querySelector('.chat')
    const sendImg = document.querySelector('.send_img')

    function chat() {
      // spoken 要发给机器人的聊天消息
      const spoken = chatInput.value

      const newLi1 = document.createElement('li')
      newLi1.classList.add('right')
      newLi1.innerHTML = `
        <span>${spoken}</span>
        <img src="./assets/me.pngalt="">
      `
      chatList.append(newLi1)
      // 让滚动条始终在底部
      chatDiv.scrollTop = chatDiv.scrollHeight
      // 输入框清空
      chatInput.value = ''

      axios({
        url: 'https://hmajax.itheima.net/api/robot',
        // get
        params: {
          spoken,
        }

      }).then(res => {

        // console.log(res)
        // console.log(res.data.data.info)
        // console.log(res.data.data.info.text)

        const newLi2 = document.createElement('li')
        newLi2.classList.add('left')
        newLi2.innerHTML = `
          <img src="./assets/you.png" alt="">
          <span>${res.data.data.info.text}</span>
        `
        chatList.append(newLi2)

        // 让滚动条始终在底部
        chatDiv.scrollTop = chatDiv.scrollHeight

      }).catch(error => {
        console.log(error)

        // console.log(error.response.data.message)
      })
    }

    // 回车键发送信息
    chatInput.addEventListener('keyup', function (e) {
      // console.log(e.key)
      if (e.key === 'Enter') {
        // console.log(11)
        chat()
      }
    })

    // 点击发送按钮发送信息
    sendImg.addEventListener('click', function () {
      chat()
    })
  </script>

13.2 必要商城搜索功能

// 目标: 点击搜索按钮(放大镜), 根据关键词搜索商品并铺设列表
const searchInp = document.querySelector('#searchInp')
const searchButton = document.querySelector('#searchButton')

searchButton.addEventListener('click', function () {
	const searchText = searchInp.value
	const categoryList = document.querySelector('.category-list')
	axios({
		url: `https://hmajax.itheima.net/api-s/searchGoodsList`,
		params: {
			searchText,
		},
	}).then((res) => {
		console.log(res.data.list.data[0])

		let str = res.data.list.data
			.map((item) => {
				const { evalNum, goodsName, goodsPrice, imageUrl, newStatus, sellCount } = item
				return `
					<li>
						<a>
							<i><img src="${imageUrl}"></i>
							<div class="supplier">祖玛珑同原料制造商</div>
							<div class="title">${goodsName}</div>
							<div class="priceBox">
								<div class="price" price="${goodsPrice}"><span style="color: #F7A701; font-size: 12px; padding-left: 2px;">¥<span
											style="font-size:18px;">${goodsPrice}</span></span></div>
								<div class="mack"><span style="color:#FB4C81;background:#FFFFFF; border-color:#FB4C81">一起拼</span><span
										style="color:#FFFFFF;background:#AB7FD1; border-color:#AB7FD1">精选</span></div>
							</div>
							<div class="evaluate">${evalNum}条好评</div>
						</a>
					</li>
				`;
			})
			.join("");
		categoryList.innerHTML = str;
	});
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925747.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【微服务】 Eureka和Ribbon

一、Eureka 服务调用出现的问题&#xff1a;在远程调用另一个服务时&#xff0c;我们采用的解决办法是发送一次http请求&#xff0c;每次环境的变更会产生新的地址&#xff0c;所以采用硬编码会出现很多麻烦&#xff0c;并且为了应对并发问题&#xff0c;采用分布式部署&#…

安卓-碎片的使用入门

1.碎片(Fragment)是什么 Fragment是依赖于Activity的&#xff0c;不能独立存在的,是Activity界面中的一部分&#xff0c;可理解为模块化的Activity,它能让程序更加合理和充分地利用大屏幕的空间&#xff0c;因而在平板上应用得非常广泛. Fragment不能独立存在&#xff0c;必须…

Emgu (OpenCV)

Emgu Github Emgu 环境&#xff1a; Emgu CV 4.9.0 netframework 4.8 1、下载 libemgucv-windesktop-4.9.0.5494.exe 安装后&#xff0c;找到安装路径下的runtime文件夹复制到c#项目Debug目录下 安装目录 c# Debug目录

Stripe测试

通过官方提供的Stripe-cli工具进行测试。 1. 下载Stripe-cli 下载链接&#xff1a;Release v1.17.1 stripe/stripe-cli GitHub 2. 获取密钥 进入到stripe控制台测试模式 查看API密钥 3. 测试 指定您的API 私钥 stripe login --api-key sk_test_51ISwaXTwNwO1Rvw32DNG10…

第J7周:对于RenseNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前言1、导入包2、分组卷积模块3、残差单元4、堆叠残差单元5、搭建ResNeXt-50网络 二、问题思考 电脑环境&#xff1a; 语言环境&#xff1a;Pyth…

React第十节组件之间传值之context

1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述&#xff1a; 在我们想要每个层级都需要某一属性&#xff0c;或者祖孙之间需要传值时&#xff0c;我们可以使用 props 一层一层的向下传递&#xff0c;或者我们使用更便捷的方案&#xff0c;用 creatC…

WPF DataGrid 列隐藏

Window节点加上下面的 <Window.Resources><FrameworkElement x:Key"ProxyElement" DataContext"{Binding}" /></Window.Resources>然后随便加一个隐藏控件 <ContentControl Content"{StaticResource ProxyElement}" Visi…

【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍 利用了 cnchar 库来进行汉字相关的信息查询&#xff0c;并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息用户输入一个汉字后&#xff0c;点击查询按钮&#xff0c;页面会展示该汉字的拼音、笔画数、笔画顺序&#xff0c;并绘制相应的笔画动画和测试图案 cnchar…

sqoop import报错java.lang.NullPointerException

场景&#xff1a;从TDSQL抽数到hdfs报错&#xff0c;需要指定驱动类名 报错如下&#xff1a; java.lang.RuntimeException: java.lang.NullPointerException Caused by: java.lang.RuntimeException: java.lang.NullPointerException 修改前抽数脚本&#xff1a; #执行sqoo…

小程序 - 个人简历

为了让招聘人员快速地认识自己&#xff0c;可以做一个“个人简历”微信小程序&#xff0c; 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…

接口性能优化宝典:解决性能瓶颈的策略与实践

目录 一、直面索引 &#xff08;一&#xff09;索引优化的常见场景 &#xff08;二&#xff09;如何检查索引的使用情况 &#xff08;三&#xff09;如何避免索引失效 &#xff08;四&#xff09;强制选择索引 二、提升 SQL 执行效率 &#xff08;一&#xff09;避免不必…

通过金蝶云星空实现高效仓储管理

金蝶云星空数据集成到旺店通WMS的技术案例分享 在企业日常运营中&#xff0c;库存管理和物流调度是至关重要的环节。为了实现高效的数据流转和业务协同&#xff0c;我们采用了轻易云数据集成平台&#xff0c;将金蝶云星空的数据无缝对接到旺店通WMS。本次案例聚焦于“调拨入库…

数字IC后端实现之PR工具中如何避免出现一倍filler的缝隙?

在数字IC后端实现中&#xff0c;由于有的工艺foundary不提供Filler1&#xff0c;所以PR工具Innovus和ICC2在做标准单元摆放时需要避免出现两个标准单元之间的缝隙间距是Filler1。为了实现这个目的&#xff0c;我们需要给PR工具施加一些特殊的placement constraint&#xff08;典…

【React】全局状态管理(Context, Reducer)

以下为知行小课学习笔记。 概述 Context 跨组件共享状态 在 Next 项目&#xff0c;封装 useContext。 AppContext.tsx "use client";import React, {createContext, Dispatch, ReactNode, SetStateAction, useContext, useMemo, useState} from react;type State …

【游资悟道】-作手新一悟道心法

作手新一经典语录节选&#xff1a; 乔帮主传完整版&#xff1a;做股票5年&#xff0c;炼成18式&#xff0c;成为A股低吸大神&#xff01;从小白到大神&#xff0c;散户炒股的六个过程&#xff0c;不看不知道自己水平 围着主线做&#xff0c;多研究龙头&#xff0c;研究涨停&am…

Sqoop的安装和配置,Sqoop的数据导入导出,MySQL对hdfs数据的操作

sqoop的安装基础是hive和mysql&#xff0c;没有安装好的同学建议去看一看博主的这一篇文章 Hive的部署&#xff0c;远程模式搭建&#xff0c;centos换源&#xff0c;linux上下载mysql。_hive-4.0.1-CSDN博客 好的那么接下来我们开始表演&#xff0c;由于hive是当时在hadoop03上…

医疗废物检测

3809总图像数 数据集分割 训练组80&#xff05; 3030图片 有效集20&#xff05; 779图片 测试集&#xff05; 0图片 标签 预处理 自动定向&#xff1a; 已应用 调整大小&#xff1a; 拉伸至 640x640 增强 未应用任何增强。 注射器 手术刀 输液管 医用手套 医用口罩 血渍 数据集…

音视频流媒体直播/点播系统EasyDSS互联网视频云平台介绍

随着互联网技术的飞速发展&#xff0c;音视频流媒体直播已成为现代社会信息传递与娱乐消费的重要组成部分。在这样的背景下&#xff0c;EasyDSS互联网视频云平台应运而生&#xff0c;它以高效、稳定、便捷的特性&#xff0c;为音视频流媒体直播领域带来了全新的解决方案。 1、产…

4. STM32_定时器

概述 什么是定时器&#xff1a; 定时器核心就是计数器&#xff0c;是使用精准的时基&#xff0c;通过硬件的方式&#xff0c;实现定时功能的器件。 定时器的工作原理&#xff1a; 主频时钟CLK通过PSC进行分频后产生定时器时钟TIM CLK&#xff0c;计数器CNT根据TIM CLK的频率…

BEPUphysicsint定点数3D物理引擎介绍

原文&#xff1a;BEPUphysicsint定点数3D物理引擎介绍 - 哔哩哔哩 帧同步的游戏中如果用物理引擎&#xff0c;为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如…