微信小程序开发 - 必备理论知识

文章目录

  • 小程序开发必备理论知识
    • 一、自定义组件
      • 1. 自定义组件 - 组件的创建与引用
        • 1.1 创建组件
        • 1.2 引用组件
        • 1.3 局部引用组件
        • 1.4 全局引用组件
        • 1.5 全局引用 VS 局部引用
        • 1.6 组件和页面的区别
      • 2. 自定义组件 - 样式
        • 2.1 组件样式隔离
        • 2.2 组件样式隔离的注意点
        • 2.3 修改组件的样式隔离选项
        • 2.4 styleIsolation 的可选值
      • 3. 自定义组件 - 数据、方法和属性
        • 3.1 data 数据
        • 3.2 methods 方法
        • 3.3 properties 属性
        • 3.4 data 和 properties 的区别
        • 3.5 使用 setData 修改 properties 的值
      • 4. 自定义组件 - 数据监听器
        • 4.1 什么是数据监听器
        • 4.2 数据监听器的基本用法
        • 4.3 监听对象属性的变化
      • 5. 自定义组件 - 纯数据字段
        • 5.1 什么是纯数据字段
        • 5.2 使用规则
        • 5.3 使用纯数据字段改造数据监听器案例
      • 6. 自定义组件 - 组件的生命周期
        • 6.1 组件全部的生命周期函数
        • 6.2 组件主要的生命周期函数
        • 6.3 lifetimes 节点
      • 7. 自定义组件 - 组件所在页面的生命周期
        • 7.1 什么是组件所在页面的生命周期
        • 7.2 pageLifetimes 节点
        • 7.3 生成随机的 RGB 颜色值
      • 8. 自定义组件 - 插槽
        • 8.1 什么是插槽
        • 8.2 单个插槽
        • 8.3 启用多个插槽
        • 8.4 定义多个插槽
        • 8.5 使用多个插槽
      • 9. 自定义组件 - 父子组件之间的通信
        • 9.1 父子组件之间通信的 3 种方式
        • 9.2 属性绑定
        • 9.3 事件绑定
        • 9.4 获取组件实例
      • 10. 自定义组件 - behaviors
        • 10.1 什么是 behaviors
        • 10.2 behaviors 的工作方式
        • 10.3 创建 behavior
        • 10.4 导入并使用 behavior
        • 10.5 behavior 中所有可用的节点
        • 10.6 同名字段的覆盖和组合规则
    • 二、使用npm包
      • 1. 使用 npm 包 - Vant Weapp
        • 1.1 官方文档地址
        • 1.2 安装教程
        • 1.3 CSS 变量的基本用法MDN文档
        • 1.4 Vant 官方配置文件
      • 2. 使用 npm 包 - API Promise化
        • 2.1 基于回调函数的异步 API 的缺点
        • 2.2 什么是 API Promise 化
        • 2.3 实现 API Promise 化
        • 2.4 调用 Promise 化之后的异步 API
    • 三、全局数据共享
      • 什么是全局数据共享
      • 小程序中的全局数据共享方案
      • 1. 全局数据共享 - MobX
        • 1.1 安装 MobX 相关的包
        • 1.2 创建 MobX 的 Store 实例
        • 1.3 将 Store 中的成员绑定到页面中
        • 1.4 在页面上使用 Store 中的成员
        • 1.5 将 Store 中的成员绑定到组件中
        • 1.6 在组件中使用 Store 中的成员
    • 四、分包
      • 1、分包 - 基础概念
        • 1.1 什么是分包
        • 1.2 分包的好处
        • 1.3 分包前项目的构成
        • 1.4 分包后项目的构成
        • 1.5 分包的加载规则
        • 1.6 分包的体积限制
      • 2、分包 - 使用分包
        • 2.1 配置方法
        • 2.2 打包原则
        • 2.3 引用原则
      • 3、分包 - 独立分包
        • 3.1 什么是独立分包
        • 3.2 独立分包和普通分包的区别
        • 3.3 独立分包的应用场景
        • 3.4 独立分包的配置方法
        • 3.5 引用原则
      • 4、分包 - 分包预下载
        • 4.1 什么是分包预下载
        • 4.2 配置分包的预下载
        • 4.3 分包预下载的限制

小程序开发必备理论知识

一、自定义组件

1. 自定义组件 - 组件的创建与引用

1.1 创建组件

在小程序中,创建组件需要定义组件的结构、样式和行为。以下是一个简单的组件目录结构:

|- components|- custom-component|- custom-component.js|- custom-component.json|- custom-component.wxml|- custom-component.wxss
1.2 引用组件

引用组件可以通过在页面的 .json 文件中配置 usingComponents 字段,然后在页面的 .wxml 文件中以标签的形式引用组件:

pages/index/index.json:

{"usingComponents": {"custom-component": "/components/custom-component/custom-component"}
}

pages/index/index.wxml:

<view><custom-component></custom-component>
</view>
1.3 局部引用组件

局部引用组件是指将组件引入到某个页面或组件内,而不是全局引用。这样做可以提高代码的灵活性和复用性。

pages/index/index.json:

{"usingComponents": {"custom-component": "/components/custom-component/custom-component"}
}

pages/index/index.wxml:

<view><custom-component></custom-component>
</view>
1.4 全局引用组件

全局引用组件是指在整个小程序中都可以使用该组件,不需要在每个页面或组件内单独引用。

app.json:

{"usingComponents": {"custom-component": "/components/custom-component/custom-component"}
}

pages/index/index.wxml:

<view><custom-component></custom-component>
</view>
1.5 全局引用 VS 局部引用

全局引用和局部引用各有优势,全局引用适用于在整个小程序中都需要使用的组件,而局部引用适用于只在某个页面或组件内使用的组件。

1.6 组件和页面的区别

组件和页面在小程序中有一些区别,包括生命周期函数的执行时机和组件的作用域。理解这些区别有助于更好地利用自定义组件进行开发。

2. 自定义组件 - 样式

2.1 组件样式隔离

小程序中的组件样式是默认隔离的,即组件内部的样式不会影响到外部页面或组件。这种隔离有助于保持代码的独立性。

2.2 组件样式隔离的注意点

在使用组件样式隔离时,需要注意一些细节,例如如何正确引用外部样式。

2.3 修改组件的样式隔离选项

开发者可以根据实际需求修改组件的样式隔离选项,灵活控制样式的作用范围。

2.4 styleIsolation 的可选值
可选值默认值描述
isolatedtrue组件样式仅对组件生效,不影响外部样式。
apply-sharedfalse组件样式对组件生效,同时会影响引入组件的外部样式。
sharedfalse组件样式对组件生效,同时也会影响引入组件的外部样式,且外部样式对组件也生效。

3. 自定义组件 - 数据、方法和属性

3.1 data 数据

组件内部可以定义 data 数据,用于存储组件的状态信息。

custom-component.js:

Component({data: {count: 0},// other properties and methods
})
3.2 methods 方法

methods 字段用于定义组件的方法,这些方法可以在组件内被调用。

custom-component.js:

Component({data: {count: 0},methods: {increaseCount() {this.setData({count: this.data.count + 1});}}// other properties
})
3.3 properties 属性

properties 字段用于定义组件的属性,属性可以由组件外部传入,从而实现组件与外部的数据交互。

custom-component.json:

{"component": true,"properties": {"title": {"type": String,"value": "Default Title"}}
}
3.4 data 和 properties 的区别

理解 dataproperties 的区别是使用自定义组件的关键,它们分别用于组件内部的状态管理和与外部数据的交互。

3.5 使用 setData 修改 properties 的值

在组件内部可以使用 setData 方法修改 properties 的值,从而实现动态更新组件的属性。

custom-component.js:

Component({properties: {title: {type: String,value: "Default Title",observer: function (newVal, oldVal) {console.log('title changed', newVal, oldVal);}}},methods: {changeTitle() {this.setData({title: "New Title"});}}// other properties
})

4. 自定义组件 - 数据监听器

4.1 什么是数据监听器

数据监听器用于监听组件内部 dataproperties 的变化,当数据发生变化时触发相应的操作。

custom-component.js:

Component({data: {count: 0},observers: {'count': function (newVal, oldVal) {console.log('count changed', newVal, oldVal);}},// other properties and methods
})
4.2 数据监听器的基本用法

通过定义监听器函数,可以在数据变化时执行自定义的逻辑。

4.3 监听对象属性的变化

数据监听器不仅可以监听基本类型的数据变化,还可以监听对象属性的变化,实现

更精细化的数据控制。

custom-component.js:

Component({data: {user: {name: 'John',age: 25}},observers: {'user.name': function (newVal, oldVal) {console.log('user name changed', newVal, oldVal);}},// other properties and methods
})

5. 自定义组件 - 纯数据字段

5.1 什么是纯数据字段

纯数据字段是一种特殊的数据形式,用于在组件内定义一些纯粹的数据,不参与视图层的渲染。

5.2 使用规则

纯数据字段的使用规则相对简单,只需要在组件的 json 文件中声明即可。

custom-component.json:

{"component": true,"pureData": {"fieldName": "fieldValue"}
}
5.3 使用纯数据字段改造数据监听器案例

通过使用纯数据字段,可以改造数据监听器,使得组件更加清晰和易维护。

custom-component.json:

{"component": true,"pureData": {"isListening": false},"observers": {'isListening': function (newVal) {if (newVal) {console.log('Start listening');// Start listening logic} else {console.log('Stop listening');// Stop listening logic}}}
}

6. 自定义组件 - 组件的生命周期

6.1 组件全部的生命周期函数

小程序中,组件有一系列的生命周期函数,包括 createdattachedreadymoveddetached 等。

custom-component.js:

Component({lifetimes: {created() {console.log('component created');},attached() {console.log('component attached');},ready() {console.log('component ready');},moved() {console.log('component moved');},detached() {console.log('component detached');}},// other properties and methods
})
6.2 组件主要的生命周期函数

了解组件的主要生命周期函数有助于合理地处理组件的初始化、渲染和销毁过程。

6.3 lifetimes 节点

lifetimes 节点用于定义组件的生命周期函数,包括 createdattachedreadymoveddetached 等。

7. 自定义组件 - 组件所在页面的生命周期

7.1 什么是组件所在页面的生命周期

组件所在页面的生命周期指的是组件在页面中的生命周期,包括 showhide 等。

custom-component.js:

Component({pageLifetimes: {show() {console.log('component show');},hide() {console.log('component hide');}},// other properties and methods
})
7.2 pageLifetimes 节点

通过 pageLifetimes 节点,可以定义组件所在页面的生命周期函数,实现组件与页面的协同工作。

7.3 生成随机的 RGB 颜色值

在页面生命周期函数中,可以实现一些动态的操作,例如生成随机的 RGB 颜色值,为用户提供更丰富的交互体验。

custom-component.js:

Component({pageLifetimes: {show() {const randomColor = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;console.log('generated random color', randomColor);}},// other properties and methods
})

8. 自定义组件 - 插槽

8.1 什么是插槽

插槽是一种用于在组件内部承载内容的机制,使得组件可以更加灵活地适应不同的使用场景。

custom-component.wxml:

<view class="container"><view class="header">Header</view><slot></slot><view class="footer">Footer</view>
</view>
8.2 单个插槽

组件可以定义单个插槽,用于承载外部传入的内容。

index.wxml:

<custom-component><view>Content Goes Here</view>
</custom-component>
8.3 启用多个插槽

通过启用多个插槽,可以支持更复杂的内容布局和组合。

custom-component.wxml:

<view class="container"><view class="header">Header</view><slot name="content"></slot><view class="footer">Footer</view><slot name="footer"></slot>
</view>
8.4 定义多个插槽

在组件内部,可以通过定义多个插槽,为不同的内容提供不同的展示方式。

index.wxml:

<custom-component><view slot="content">Content Goes Here</view><view slot="footer">Custom Footer</view>
</custom-component>
8.5 使用多个插槽

在页面中使用组件时,可以根据需要传入不同的内容到不同的插槽中,实现更灵活的布局。

9. 自定义组件 - 父子组件之间的通信

9.1 父子组件之间通信的 3 种方式

父子组件之间可以通过属性绑定、事件绑定和获取组件实例等方式进行通信,实现数据的传递和操作的触发。

9.2 属性绑定

通过属性绑定,父组件可以向子组件传递数据,实现数据的共享。

parent-component.wxml:

<child-component title="{{parentTitle}}"></child-component>

child-component.js:

Component({properties: {title: String},// other properties and methods
})
9.3 事件绑定

通过事件绑定,子组件可以向父组件发送事件,触发父组件中的相应逻辑。

child-component.js:

Component({methods: {onTap() {this.triggerEvent('customEvent', { data: 'Hello from Child' });}}// other properties
})

parent-component.wxml:

<child-component bind:customEvent="onChildEvent"></child-component>

parent-component.js:

Page({onChildEvent(event) {console.log('Received custom event from child:', event.detail.data);}// other methods
})
9.4 获取组件实例

通过获取组件实例,可以直接调用组件的方法,实现更直接的通信方式。

parent-component.js:

Page({onReady() {const childComponent = this.selectComponent('#child');childComponent.doSomething();}// other methods
})

parent-component.wxml:

<child-component id="child"></child-component>

10. 自定义组件 - behaviors

10.1 什么是 behaviors

Behaviors 是一种可复用的代码块,通过引入 behaviors,可以将一组方法、数据和生命周期函数注入到组件中。

10.2 behaviors 的工作方式

Behaviors 通过混入的方式工作,将 behaviors 中的内容合并到组件中,实现代码的复用。

10.3 创建 behavior

在小程序中,可以创建自定义的 behavior,定义其中的方法和数据。

custom-behavior.js:

module.exports = Behavior({data: {behaviorData: 'This is from behavior'},methods: {behaviorMethod() {console.log('Behavior method');}}
})
10.4 导入并使用 behavior

通过在组件的 behaviors 字段中导入并使用 behavior,实现代码的重用和模块化。

custom-component.js:

const customBehavior = require('/path/to/custom-behavior');Component({behaviors: [customBehavior],// other properties and methods
})
10.5 behavior 中所有可用的节点
可用的节点类型是否必填描述
createdFunction组件生命周期函数,在组件实例刚刚被创建时执行。
attachedFunction组件生命周期函数,在组件实例进入页面节点树时执行。
readyFunction组件生命周期函数,在组件布局完成后执行。
movedFunction组件生命周期函数,在组件实例被移动到节点树另一个位置时执行。
detachedFunction组件生命周期函数,在组件实例被从页面节点树移除时执行。
dataObject组件的内部数据,用于页面渲染。
methodsObject组件的方法,可以在页面内调用。
propertiesObject组件的属性,用于接收父组件传递的数据。
lifetimesObject组件的生命周期函数集合,包括 created、attached、ready、moved、detached。
pageLifetimesObject组件所在页面的生命周期函数集合,包括 show、hide。
definitionFilterFunction用于过滤 behaviors 中定义的字段,返回 true 表示保留,返回 false 表示过滤。
10.6 同名字段的覆盖和组合规则

当组件和 behavior 中存在同名字段时,小程序有一套规则来确定最终的取值,包括覆盖和组合的方式。

二、使用npm包

1. 使用 npm 包 - Vant Weapp

1.1 官方文档地址

Vant Weapp官方文档

1.2 安装教程

Vant Weapp安装教程

1.3 CSS 变量的基本用法MDN文档

CSS 变量的基本用法MDN文档

1.4 Vant 官方配置文件

Vant官方配置文件

2. 使用 npm 包 - API Promise化

2.1 基于回调函数的异步 API 的缺点

传统的异步 API 多采用回调函数的方式,但这种方式存在回调地狱、可读性差等问题。

2.2 什么是 API Promise 化

API Promise 化是指将原本使用回调函数的异步 API 转化为返回 Promise 对象的形式,以更直观、便捷地处理异步操作。

2.3 实现 API Promise 化

使用 miniprogram-api-promise 这个第三方的 npm 包的 promisifyAll 方法,可以实现将小程序原生的异步 API 转化为 Promise 化的形式。

首先,安装 miniprogram-api-promise

npm install miniprogram-api-promise

然后,在小程序代码中使用:

//1.在小程序入口文件中调用一次 promisifyAll()方法
import { promisifyAll } from 'miniprogram-api-promise'
//2.声明一个常量,为一个空对象
const wxp = wx.p = {}
//3.调用 promisifyAll()方法
promisifyAll(wx, wxp)
2.4 调用 Promise 化之后的异步 API
  • 我们在 wx 全局对象上定义一个属性 p 让他和 wxp 指向同一个空对象
  • promisifyAll : 做的事就是将 wx 拥有的属性方法都 copy 并改造了一份给了 wxp 这个对象
  • 这样wxp和wx.p就都指向了同一个对象
//使用
async getInfo () {const { data: res } = await wx.p.request({url: 'https://www.escook.cn/api/get',method: 'GET',data: {name: 'zs',age: 19}})// res 处理console.log(res)
}

通过这种方式,可以更清晰、简洁地处理小程序的异步 API 调用。

三、全局数据共享

什么是全局数据共享

全局数据共享是指在小程序中,使数据能够在不同页面或组件之间进行共享,以便实现全局状态的管理和同步更新。

小程序中的全局数据共享方案

在小程序中,有多种全局数据共享方案,其中之一是使用第三方库 MobX。MobX 是一个简单、可扩展的状态管理库,可以帮助实现全局数据的响应式更新和共享。

1. 全局数据共享 - MobX

1.1 安装 MobX 相关的包

首先,安装 MobX 及其相关的包:

npm install mobx mobx-miniprogram
1.2 创建 MobX 的 Store 实例

创建一个 MobX 的 Store 实例,用于管理全局数据:

// store.js
const { observable, action } = require('mobx-miniprogram');class AppStore {@observable globalData = {userInfo: null,// other global data};@action setUserInfo(userInfo) {this.globalData.userInfo = userInfo;}
}module.exports = new AppStore();
1.3 将 Store 中的成员绑定到页面中

在需要使用全局数据的页面中,将 Store 中的成员绑定到页面:

// index.js
const app = getApp();
const store = require('../../store');Page({onLoad() {this.setData({userInfo: app.store.globalData.userInfo,});// 监听 globalData 的变化this.dispose = store.observe(() => {this.setData({userInfo: app.store.globalData.userInfo,});});},onUnload() {// 移除监听this.dispose();},
});
1.4 在页面上使用 Store 中的成员

在页面中可以直接使用 Store 中的成员:

<!-- index.wxml -->
<view>{{ userInfo.nickName }}</view>
1.5 将 Store 中的成员绑定到组件中

在需要使用全局数据的组件中,也可以将 Store 中的成员绑定到组件:

// custom-component.js
const store = require('../../store');Component({lifetimes: {attached() {this.setData({userInfo: store.globalData.userInfo,});// 监听 globalData 的变化this.dispose = store.observe(() => {this.setData({userInfo: store.globalData.userInfo,});});},detached() {// 移除监听this.dispose();},},
});
1.6 在组件中使用 Store 中的成员

在组件中同样可以直接使用 Store 中的成员:

<!-- custom-component.wxml -->
<view>{{ userInfo.nickName }}</view>

通过以上步骤,就实现了在小程序中使用 MobX 进行全局数据的共享和响应式更新。

四、分包

1、分包 - 基础概念

1.1 什么是分包

分包是指将小程序项目划分成不同的子包,每个子包都可以包含页面、组件、资源文件等,实现模块化管理和按需加载。

1.2 分包的好处
  • 减小小程序首次启动时的下载体积,提高启动速度。
  • 按需加载,优化用户体验。
  • 灵活管理项目结构,方便团队协作和代码维护。
1.3 分包前项目的构成

在进行分包前,项目可能是单一的整体,包含全部页面和资源。

1.4 分包后项目的构成

分包后,项目会被划分为主包和多个子包,每个子包可以包含特定的功能模块。

1.5 分包的加载规则

小程序在启动时会先下载主包,然后在需要时再下载子包。子包是按需加载的,用户访问对应的页面或组件时才会下载相关子包。

1.6 分包的体积限制

每个分包的体积不能超过 2MB,超过会导致分包加载失败。

2、分包 - 使用分包

2.1 配置方法

在小程序的 app.json 文件中使用 subpackages 字段配置分包信息,指定每个分包的路径和名字。

{"pages": ["pages/index/index"],"subpackages": [{"root": "subpackage1","pages": ["pages/subpage1/index","pages/subpage1/detail"]},{"root": "subpackage2","pages": ["pages/subpage2/index","pages/subpage2/detail"]}]
}
2.2 打包原则

主包中包含 app.jsonapp.jsapp.wxssproject.config.json 等文件,每个分包下都有一个独立的 package.json

2.3 引用原则

在主包中,可以直接引用主包和其他分包的页面和组件。在分包中,只能引用自己分包内的页面和组件。

3、分包 - 独立分包

3.1 什么是独立分包

独立分包是指一个分包中包含了完整的小程序结构,可以独立运行。主包和其他分包可以引用独立分包内的页面和组件。

3.2 独立分包和普通分包的区别

独立分包可以包含完整的小程序结构,具备更强的独立性。普通分包只能包含部分页面和资源。

3.3 独立分包的应用场景

适用于某个功能模块比较独立,可以独立运行的场景。

3.4 独立分包的配置方法

app.jsonsubpackages 中配置 "independent": true

{"subpackages": [{"root": "independent-package","pages": ["pages/index/index","pages/detail/detail"],"independent": true}]
}
3.5 引用原则

独立分包内的页面和组件可以被主包和其他分包引用。

4、分包 - 分包预下载

4.1 什么是分包预下载

分包预下载是指在小程序启动时,提前加载分包的部分代码和资源,加速分包的加载速度。

4.2 配置分包的预下载

app.json 中的 subpackages 中使用 "preloadRule" 配置预下载规则:

{"subpackages": [{"root": "subpackage1","pages": ["pages/subpage1/index"],"preloadRule": {"pages/subpage1/index": {"network": "all","packages": ["subpackage1"]}}}]
}
4.3 分包预下载的限制
  • 预下载的代码和资源会占用用户的存储空间。
  • 预下载仅在用户打开小程序时生效,离开小程序后失效。
  • 预下载的分包大小限制为 2MB。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1-1.this指针闭包作用域

课程目标 知识要点 补充知识点 面试建议 在自己简历的项目中找到面试可能会深挖的临界点 分别列出来每一个项目的基础部分&#xff0c;临界点&#xff0c;业务范围再往深了做的话能够做成什么样&#xff08;这点比较难&#xff0c;可以在github上&#xff0c;或搜一搜网上有…

react hook问题记录(持续更新)

在使用react hook时候的一些问题记录 实际使用react hook的时候遇到的一些问题记录下来了&#xff0c;温故而知新。 问题1&#xff1a;useState已经重新赋值了&#xff0c;但是拿到的还是之前的值 例子1&#xff1a;界面上有个按钮&#xff0c;点击按钮界面上数值会增加1和2…

REST2SQL是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

REST2SQL是一种将RESTful API转换为SQL查询的工具或技术。它可以将RESTful API中的请求转换为对数据库的SQL查询&#xff0c;以便从数据库中检索、更新或删除数据。 REST2SQL的工作原理是通过分析RESTful API的请求参数和路径&#xff0c;将其转换为相应的SQL查询语句。这样可…

vtk qt切割stl模型

一直想实现对stl模型的某个方向进行平面切割 通过滑动slider然后对模型进行某一个方向的面切割。同时可以用鼠标对模型进行移动缩放&#xff0c;旋转等操作。然后可以加一些颜色点云显示等操作。 stl加载&#xff1a; QString selectFilePath QFileDialog::getOpenFileName…

JS遍历对象的方法及特点

1、定义一个对象 let obj {name: Tom,age: 20,sex: 男,};obj.weight 70kg;// obj的原型上定义属性Object.prototype.height 180cm;Object.prototype.major function() {console.log(专业&#xff1a;计算机应用技术);};console.log(obj, obj); 控制台输出的obj中&#xff…

UDP服务器和客户端的创建步骤

UDP服务器的实现流程&#xff1a;一、创建用户数据报套接字&#xff08;socket函数&#xff09;&#xff1a;通信域选择IPV4网络协议、套接字类型选择数据报式&#xff1b; int sockfd socket(AF_INET,SOCK_DGRAM,0); 二、填充服务器的网络信息结构体&#xff1a;1.定义网络信…

拼多多根据ID取商品详情原数据 API 实现实时数据获取的完整指南

在电商行业中&#xff0c;商品详情页是用户了解商品信息、进行购买决策的重要页面。为了提高用户体验和促进销售&#xff0c;电商平台通常会提供商品详情的API接口&#xff0c;以便第三方应用能够实时获取商品数据。本文将介绍如何使用拼多多获得的根据ID取商品详情原数据的API…

Java_线程安全

一、多线程常用方法 下面我们演示一下getName()、setName(String name)、currentThread()、sleep(long time)这些方法的使用效果。 public class MyThread extends Thread{public MyThread(String name){super(name); //1.执行父类Thread(String name)构造器&#xff0c;为当前…

通过DTS实现PG14迁移到人大金仓V8R6

迁移需求 xxx项目适配人大金仓&#xff0c;测试环境195pgsql数据库需要进行迁移至192.168.3.29 人大金仓数据库&#xff1b; 数据库信息 ip os登录账号密码 数据库类型 数据库端口 数据库 数据库用户密码 源库 192.168.3.15 root/123456 PG14.2 5432 ahtjtestnew …

Docker安装并配置Mongodb 5.0单机复制集

#初始化复制配置#创建数据目录 sudo mkdir -p /app/mongodb5-0/db sudo mkdir -p /app/mongodb5-0/configdb sudo chmod -R 777 /app/mongodb5-0 #生成keyfile sudo openssl rand -base64 128 > /app/mongodb5-0/configdb/keyFile sudo chmod 600 /app/mongodb5-0/configd…

【数据结构】排序之归并排序与计数排序

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 目录 1. 前言2. 归并排序2.1 递归实现2.1.1 分析2.1.2 代码实现 2.2 非递归实现2.2.1 分析2.2.2 代码实现 3. 计数排序3.1 分析3.2 代码实现 4. 附代码4.1 Sort.h4.2 Sort.c4.3…

centos7系统 gdb调试jdk11源码

centos7 gdb调试jdk11源码 ##首先你得编译一个debug版本的jdk11。教程centos7下openjdk11源码下载编译安装_openjdk11下载-CSDN博客 ##gdb 启动java进程 设置运行参数、设置断点 运行、调试进入main断点 gdb /home/yym/code/jdk11u-master/build/linux-x86_64-normal-serve…

Batch Normalization、Layer Normalization代码实现

目录 前言批量正则化-BN层正则化-LN 前言 BN(Batch Normalization)首次提出与论文&#xff0c;主要目的是为了解决训练深层神经网络慢的问题。我们可以神经网络整体可以看成一个高阶的复杂函数&#xff0c;通过训练优化它的参数&#xff0c;可以用于拟合各种复杂的数据分布。一…

营销与经营一体,巨量引擎如何激发生意新未来?

12月6日&#xff0c;在第九届GDMS全球数字营销峰会上&#xff0c;巨量引擎发表了《营销经营一体&#xff0c;激发生意新未来》为主题的演讲&#xff0c;分享了巨量引擎如何在营销与经营一体化的背景下&#xff0c;通过极致的产品技术创新&#xff0c;激发生意新未来。 激发全渠…

ClientHttpRequestInterceptor报错Timeout waiting for connection from pool

restTemplate实现ClientHttpRequestInterceptor&#xff0c;报错org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool 代码如下&#xff1a; Configuration public class HttpConfig {private static final Integer RETRY_COUNT…

0基础学java-day26(满汉楼实战)

一、界面设计 1. 需求说明 2 界面设计 2.1 用户登录 2.2 显示餐桌状态 2.3 预订 2.4 显示菜品 2.5 点餐 2.6 查看账单 2.7 结账 3 分层设计 二、功能实现 1 工具类 1.1 构建如下的项目结构 1.2 导入相关的工具类和jar包 相关的工具类和jar包会放在评论区的百度网盘的链接…

VBA之Excel应用第五节:录制宏时,使用绝对引用和相对引用

《VBA之Excel应用》&#xff08;版权10178983&#xff09;是非常经典的&#xff0c;是我推出的第七套教程&#xff0c;定位于初级&#xff0c;目前是第一版修订。这套教程从简单的录制宏开始讲解&#xff0c;一直到窗体的搭建&#xff0c;内容丰富&#xff0c;实例众多。大家可…

java常见面试题:如何使用Java进行分布式系统开发?

在Java中进行分布式系统开发需要使用一些特定的技术和框架。以下是一些关键步骤和概念&#xff0c;帮助你开始使用Java进行分布式系统开发&#xff1a; 了解分布式系统&#xff1a; 分布式系统是由多个独立节点组成的系统&#xff0c;这些节点通过网络相互通信和协作&#xff…

基于JAVA+ssm开发的在线报名系统设计与实现【附源码】

基于JAVAssm开发的在线报名系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …