当前位置: 首页 > news >正文

一篇文章学懂Vuex

一、基于VueCli自定义创建项目

233

344

二、Vuex 初始准备

建项目的时候把vuex勾选上就不用再yarn add vuex@3了

store/index.js

// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store()// 到处给main.js使用
export default store

App.vue

  created () {// console.log(this.$router) // 没配console.log(this.$store) // 没配},

main.js

import Vue from 'vue'
import App from './App.vue'
import store from '@/store/index'
console.log(store.state.count)Vue.config.productionTip = falsenew Vue({render: h => h(App),store
}).$mount('#app')

三、通过vuex仓库访问数据

(1)通过store直接访问

 新建仓库数据,这样别的模块、组件都可以访问到仓库中的数据。

// 创建仓库(空仓库)
const store = new Vuex.Store({// 通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100}
}
)

例如,App.vue中的模块中(指的是template中)

    <h1>根组件--{{ $store.state.title }}--{{ $store.state.count }}</h1>

App.vue中的组件中(指的是script中) 

  created () {console.log(this.$store.state.count) // 没配},

Son.vue(模块template中) 

    从vuex中获取的值: <label>{{ $store.state.count }}</label>

main.js(js中)

console.log(store.state.count)

总结:只需要在App.vue中写好仓库,后面可以直接通过底层的逻辑去调用,即:

模板中:{{$store.state.xxx }}
组件逻辑中:this.$store.state.xxx
JS模块中:store.state.xxx

Son1.vue

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button>值 + 1</button></div>
</template><script>
export default {name: 'Son1Com'
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(2)通过辅助函数(简化)

mapState是辅助函数,帮助我们把store中的数据自动映射到组件的计算属性中

 App.vue

//展示一下 不用

import { mapState } from 'vuex'
console.log(mapState(['count', 'title']))

在App.vue中这么写,就可以直接调用使用里面的值

<template><div id="app"><h1>根组件--{{ title }}--{{ count }}</h1><input type="text"><Son1></Son1><hr><Son2></Son2></div>
</template>computed: {...mapState(['count', 'title'])},

Son2.vue,虽然写起来简单还是需要再写一遍解构函数,即  computed: {
    ...mapState(['count', 'title'])
  }

<template><div class="box"><h2>Son2 子组件 {{ title }}</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button>值 - 1</button></div>
</template><script>
import { mapState } from 'vuex'
export default {name: 'Son2Com',computed: {...mapState(['count', 'title'])}
}
</script><style lang="css" scoped>
.box {border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

四、组件修改仓库中的数据(mutations)

(1)错误情况

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd">值 + 1</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd () {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(2)严格模式 strict:true

为了避免这种情况,方便初学者检查,我们采用严格模式。store/index.js中操作

// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100}
}
)// 到处给main.js使用
export default store

(3)修改数据-mutations

 store/index.js

// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 1.通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100},// 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {//   所有的mutation函数,第一个参数,都是stateaddCount (state) {//   修改数据state.count += 1},addFive (state) {//   修改数据state.count += 5},changeTitle (state) {state.title = '小标题'}}}
)// 到处给main.js使用
export default store

Son1.vue

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd">值 + 1</button><button @click="addFive">值 + 5</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd () {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutationthis.$store.commit('addCount')},addFive () {this.$store.commit('addFive')},changeFn () {this.$store.commit('changeTitle')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(4)mutations传参

index.js

  // 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {//   所有的mutation函数,第一个参数,都是state// addCount (state) {//   //   修改数据//   state.count += 1// },addCount (state, n) {//   修改数据state.count += n},changeTitle (state, newTitle) {state.title = newTitle}}

Son.vue

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')this.$store.commit('addCount', n)console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(5)mutations传多参

只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。

Son1.vue

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')// this.$store.commit('addCount', n)// 只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。this.$store.commit('addCount', {count: n,msg: '哈哈'})console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

index.js

  // 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {addCount (state, obj) {//   修改数据state.count += obj.count}
}
)

 (6)实时输入,实时更新

不能用:value 因为不能直接改变仓库的值,但是:value是由:value和@input组成,所以可以分开用

App.vue

<template><div id="app"><h1>根组件--{{ title }}--{{ count }}</h1><input type="text" :value="count" @input="handleInput"><Son1></Son1><hr><Son2></Son2></div>
</template><script>
import { mapState } from 'vuex'
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'// console.log(mapState(['count', 'title']))export default {name: 'app',data: function () {return {}},created () {// console.log(this.$router) // 没配// console.log(this.$store) // 没配// console.log(this.$store.state.count) // 没配},computed: {...mapState(['count', 'title'])},components: {Son1,Son2},methods: {handleInput (e) {// 1.实时获取输入框的值// e.target指得是输入框  +是转化成数字类型const num = +e.target.value// 2.提交mutation,调用mutation函数this.$store.commit('changeCount', num)}}
}
</script><style>
#app {width: 600px;margin: 20px auto;border: 3px solid #ccc;border-radius: 3px;padding: 10px;
}
</style>

index.js

    changeCount (state, newCount) {state.count = newCount}

五、mapMutations(辅助函数)

 Son2.vue

<template><div class="box"><h2>Son2 子组件 {{ title }}</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button @click="handleSub(1)">值 - 1</button><button @click="handleSub(5)">值 - 5</button><button @click="handleSub(10)">值 - 10</button>
<!-- 上面可以直接用subCount()了,都没必要封装了 --><button @click="subCount(10)">值 - 10</button><button @click="changeTitle('改了标题')">改标题</button></div>
</template><script>
import { mapMutations, mapState } from 'vuex'
export default {name: 'Son2Com',computed: {...mapState(['count', 'title'])},methods: {...mapMutations(['subCount', 'changeTitle']),handleSub (n) {// this.$store.commit('subCount', n)this.subCount(n)}}
}
</script><style lang="css" scoped>
.box {border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

六、actions和getters

(1)actions和dispatch

目标:明确actions的基本用法,处理异步操作。

需求:一秒钟之后,修改state的count成666。

说明:mutations必须是同步的(便于检测数据变化,记录调试)

 index.js

// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 1.通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100},// 3.actions处理异步//   注意:不能直接操作state,操作state,还是需要commit mutationactions: {// context上下文(此处未分模块,可以当作store仓库)// context.commit('mutation名字',额外参数)changeCountAction (context, num) {//   这里是setTimeout模拟异步,以后大部分场景是发请求setTimeout(() => {context.commit('changeCount', num)}, 1000)}}
})// 到处给main.js使用
export default store

Son1.vue

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="handleChange(66)">疫苗后改为66</button><button @click="changeFn">改标题</button></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')// this.$store.commit('addCount', n)// 只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。this.$store.commit('addCount', {count: n,msg: '哈哈'})// console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')},handleSub (n) {this.$store.commit('subCount', n)},handleChange () {// 调用action// this.$store.dispatch('action名字',额外参数)this.$store.dispatch('changeCountAction', '666')}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(2)辅助函数-mapActions

目标:掌握辅助函数mapActions,映射方法,这样可以简化dispatch

Son2.vue

<template><div class="box"><h2>Son2 子组件 {{ title }}</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button @click="handleSub(1)">值 - 1</button><button @click="handleSub(5)">值 - 5</button><button @click="subCount(10)">值 - 10</button>
<!-- 上面可以直接用subCount()了,都没必要封装了 --><button @click="subCount(10)">值 - 10</button><button @click="changeTitle('改了标题')">改标题</button><button @click="changeCountAction(888)">一秒后改成888</button></div>
</template><script>
import { mapActions, mapMutations, mapState } from 'vuex'
export default {name: 'Son2Com',computed: {...mapState(['count', 'title'])},methods: {...mapMutations(['subCount', 'changeTitle']),handleSub (n) {// this.$store.commit('subCount', n)this.subCount(n)},...mapActions(['changeCountAction'])}
}
</script><style lang="css" scoped>
.box {border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(3)getters

也就是对仓库中的数据(state)进行操作

index.js

// 这里面存放的就是vuex相关的核心代码
import Vuex from 'vuex'
import Vue from 'vue'// 插件安装
Vue.use(Vuex)// 创建仓库(空仓库)
const store = new Vuex.Store({// 严格模式(有利于初学者,检测不规范的代码 => 上线时需要关闭)// 其实还是可以修改,只是会提示报错strict: true,// 1.通过state可以提供数据,所有组件共享的数据state: {title: '大标题',count: 100,list: [1, 2, 3, 4, 5, 6, 7, 8, 9]},// 2.通过mutations可以提供修改数据的方法,mutation是一个对象mutations: {//   所有的mutation函数,第一个参数,都是state// addCount (state) {//   //   修改数据//   state.count += 1// },// addCount (state, n) {//   //   修改数据//   state.count += n// },addCount (state, obj) {//   修改数据state.count += obj.count},changeTitle (state, newTitle) {state.title = newTitle},subCount (state, n) {state.count -= n},changeCount (state, newCount) {state.count = newCount}},// 3.actions处理异步//   注意:不能直接操作state,操作state,还是需要commit mutationactions: {// context上下文(此处未分模块,可以当作store仓库)// context.commit('mutation名字',额外参数)changeCountAction (context, num) {//   这里是setTimeout模拟异步,以后大部分场景是发请求setTimeout(() => {context.commit('changeCount', num)}, 1000)}},// 4.getters类似于计算属性// 但是只有获取,没有修改,修改只能通过mutationsgetters: {// 注意点:// 1.形参第一个参数,就是state// 必须有返回值,返回值就是getters的值filterList (state) {return state.list.filter(item => item > 5)}}
})// 到处给main.js使用
export default store

Son1.vue(纯原生)

<template><div class="box"><h2>Son1 子组件 {{ $store.state.title }}</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button @click="handleAdd(1)">值 + 1</button><button @click="handleAdd(5)">值 + 5</button><button @click="handleAdd(10)">值 + 10</button><button @click="handleChange">一秒后改为666</button><button @click="changeFn">改标题</button><hr><div>{{ $store.state.list }}</div><div>{{ $store.getters.filterList }}</div></div>
</template><script>
export default {name: 'Son1Com',methods: {handleAdd (n) {// 错误代码,不会报错,并且可以实现,但其实是错的 (但是vue不会监测 监测需要成本)// this.$store.state.count++// console.log(this.$store.state.count)// 应该通过mutation 核心概念 进行修改数据// 需要提交调用mutation// this.$store.commit('addCount')// this.$store.commit('addCount', n)// 只能传递有且仅有一个参数,如果是想传递多个参数,可以写成对象数组的形式。this.$store.commit('addCount', {count: n,msg: '哈哈'})// console.log(n)},changeFn (newTitle) {this.$store.commit('changeTitle', '黑马程序员')},handleChange () {// 调用action// this.$store.dispatch('action名字',额外参数)this.$store.dispatch('changeCountAction', 666)}}
}
</script><style lang="css" scoped>
.box{border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

(4)辅助函数-mapGetters 

Son2.vue(辅助函数)

<template><div class="box"><h2>Son2 子组件 {{ title }}</h2>从vuex中获取的值:<label>{{ count }}</label><br /><button @click="handleSub(1)">值 - 1</button><button @click="handleSub(5)">值 - 5</button><button @click="subCount(10)">值 - 10</button>
<!-- 上面可以直接用subCount()了,都没必要封装了 --><button @click="subCount(10)">值 - 10</button><button @click="changeTitle('改了标题')">改标题</button><button @click="changeCountAction(888)">一秒后改成888</button>
<hr>
<div>{{ filterList }}</div></div>
</template><script>
import { mapActions, mapGetters, mapMutations, mapState } from 'vuex'
export default {name: 'Son2Com',computed: {// mapState和mapGetters都是映射属性...mapState(['count', 'title']),...mapGetters(['filterList'])},methods: {handleSub (n) {// this.$store.commit('subCount', n)this.subCount(n)},// mapMutations和mapActions都是映射方法...mapMutations(['subCount', 'changeTitle']),...mapActions(['changeCountAction'])}
}
</script><style lang="css" scoped>
.box {border: 3px solid #ccc;width: 400px;padding: 10px;margin: 20px;
}
h2 {margin-top: 10px;
}
</style>

七、模块创建

相关文章:

一篇文章学懂Vuex

一、基于VueCli自定义创建项目 233 344 二、Vuex 初始准备 建项目的时候把vuex勾选上就不用再yarn add vuex3了 store/index.js // 这里面存放的就是vuex相关的核心代码 import Vuex from vuex import Vue from vue// 插件安装 Vue.use(Vuex)// 创建仓库&#xff08;空仓库…...

模拟实现Java中的计时器

定时器是什么 定时器也是软件开发中的⼀个重要组件. 类似于⼀个 "闹钟". 达到⼀个设定的时间之后, 就执⾏某个指定好的代码. 前端/后端中都会用到计时器. 定时器是⼀种实际开发中⾮常常⽤的组件. ⽐如⽹络通信中, 如果对⽅ 500ms 内没有返回数据, 则断开连接尝试重…...

全面理解-深拷贝与浅拷贝

在 C 中&#xff0c;深拷贝&#xff08;Deep Copy&#xff09; 和 浅拷贝&#xff08;Shallow Copy&#xff09; 是两种完全不同的对象拷贝策略&#xff0c;主要区别在于对指针和动态分配资源的处理方式。正确理解二者的区别是避免内存泄漏、悬空指针和程序崩溃的关键。 一、核…...

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…...

如何使用爬虫获取淘宝商品详情:API返回值说明与案例指南

在电商数据分析和运营中&#xff0c;获取淘宝商品详情是常见的需求。淘宝开放平台提供了丰富的API接口&#xff0c;允许开发者通过合法的方式获取商品信息。本文将详细介绍如何使用PHP编写爬虫&#xff0c;通过淘宝API获取商品详情&#xff0c;并解析API返回值的含义和结构。 一…...

List 接口中的 sort 和 forEach 方法

List 接口中的 sort 和 forEach 方法是 Java 8 引入的两个非常实用的函数&#xff0c;分别用于 排序 和 遍历 列表中的元素。以下是它们的详细介绍和用法&#xff1a; sort 函数 功能 对列表中的元素进行排序。 默认使用自然顺序&#xff08;如数字从小到大&#xff0c;字符…...

7.建立文件版题库|编写model文件|使用boost split字符串切分(C++)

建立文件版题库 题目的编号题目的标题题目的难度题目的描述&#xff0c;题面时间要求(内部处理)空间要求(内部处理) 两批文件构成第一个&#xff1a;questions.list : 题目列表&#xff08;不需要题目的内容&#xff09;第二个&#xff1a;题目的描述&#xff0c;题目的预设置…...

鸿蒙NEXT应用App测试-专项测试(DevEco Testing)

注意&#xff1a;大家记得先学通用测试在学专项测试 鸿蒙NEXT应用App测试-通用测试-CSDN博客 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注…...

一周学会Flask3 Python Web开发-Jinja2模板访问对象

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象&#xff0c;如果如何来访问呢&#xff1f; 我们看下下面示例&#xff1a; 定义一个Student类 cla…...

docker离线安装记录

1.安装包 首先需要从官方网站下载Docker的离线安装包&#xff0c;可以通过以下地址找到自己想安装的版本&#xff1a; wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz 【Docker】Docker学习之一&#xff1a;离线安装Docker步骤_docker离线…...

FreiHAND (handposeX-json 格式)数据集-release >> DataBall

FreiHAND &#xff08;handposeX-json 格式&#xff09;数据集-release 注意&#xff1a; 1)为了方便使用&#xff0c;按照 handposeX json 自定义格式存储 2)使用常见依赖库进行调用,降低数据集使用难度。 3)部分数据集获取请加入&#xff1a;DataBall-X数据球(free) 4)完…...

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…...

anaconda不显示jupyter了?

以前下载的anaconda显示jupyter&#xff0c;但是最近学习吴恩达的机器学习视频&#xff0c;需要用到jupyter&#xff0c;以前的jupyter运行不了&#xff0c;就重新下载了一个anaconda&#xff0c;发现新版的anaconda首页不显示jupyter了&#xff0c;在查找资料之后&#xff0c;…...

WordPress平台如何接入Deepseek,有效提升网站流量

深夜改代码到崩溃&#xff1f;《2024全球CMS生态报告》揭露&#xff1a;78%的WordPress站长因API对接复杂&#xff0c;错失AI内容红利。本文实测「零代码接入Deepseek」的保姆级方案&#xff0c;配合147SEO的智能发布系统&#xff0c;让你用3个步骤实现日均50篇EEAT合规内容自动…...

第十三:路由两个注意点:

4.3. 【两个注意点】 路由组件通常存放在pages 或 views文件夹&#xff0c;一般组件通常存放在components文件夹。 通过点击导航&#xff0c;视觉效果上“消失” 了的路由组件&#xff0c;默认是被卸载掉的&#xff0c;需要的时候再去挂载。 <script setup lang"ts&q…...

【前端学习笔记】Pinia

1.介绍 Pinia 是 Vue 3 中的官方状态管理库&#xff0c;作为 Vuex 的继任者&#xff0c;它为 Vue 3 提供了一个更现代、更灵活、更易用的状态管理解决方案。Pinia 主要用于管理应用中的全局状态&#xff0c;并提供了一个清晰、简洁的 API 来处理复杂的状态逻辑、数据流和副作用…...

Windows 11【1001问】Windows 11系统硬件配置要求

Windows 11 的设计目标是让用户更贴近自己喜欢的内容&#xff0c;在其发布之际&#xff0c;计算机在连接、创作以及游戏体验方面扮演了更加核心的角色。在设定 Windows 11 的最低系统要求时&#xff0c;我们依据三个关键原则来指导决策&#xff0c;以确保用户能够获得卓越的使用…...

ROS ur10机械臂添加140夹爪全流程记录

ROS ur10机械臂添加140夹爪 系统版本&#xff1a;Ubuntu20.04 Ros版本&#xff1a;noetic Moveit版本&#xff1a;moveit-noetic 参考博客&#xff1a; ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客 UR5机械臂仿真实例&#xf…...

火绒终端安全管理系统V2.0网络防御功能介绍

火绒终端安全管理系统V2.0 【火绒企业版V2.0】网络防御功能包含网络入侵拦截、横向渗透防护、对外攻击检测、僵尸网络防护、Web服务保护、暴破攻击防护、远程登录防护、恶意网址拦截。火绒企业版V2.0的网络防御功能&#xff0c;多层次、多方位&#xff0c;守护用户终端安全。 …...

halcon三维点云数据处理(二十五)moments_object_model_3d

目录 一、moments_object_model_3d例程二、moments_object_model_3d函数三、效果图一、moments_object_model_3d例程 这个例子说明了如何使用moments_object_model_3d运算符来将3D数据与x、y、z坐标轴对齐。在实际应用中,通过3D传感器获取的物体模型可能具有一个与物体主轴不…...

网络安全漏洞管理要求 网络安全产品漏洞

一、漏洞类型 缓冲区溢出、跨站脚本、DOS攻击、扫描、SQL 注入、木马后门、病毒蠕虫、web攻击、僵尸网络、跨站请求伪造、文件包含、文件读取、目录遍历攻击、敏感信息泄露、暴力破解、代码执行漏洞、命令执行、弱口令、上传漏洞利用、webshell利用、配置不当/错误、逻辑/涉及错…...

XML(eXtensible Markup Language)

eXtensible Markup Language&#xff08;可扩展标记语言&#xff09;是一种用来存储和传输数据的文本格式。 具体定义 XML 可扩展标记语言&#xff0c;是用于标记电子文件使其具有结构性的标记语言&#xff0c;可以 用来标记数据、定义数据类型&#xff0c;是一种允许用户对自…...

SpringBoot两种方式接入DeepSeek

方式一&#xff1a;基于HttpClient 步骤 1&#xff1a;准备工作 获取 DeepSeek API 密钥&#xff1a;访问 DeepSeek 的开发者平台&#xff0c;注册并获取 API 密钥。 步骤 2&#xff1a;引入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...

el-date-picker 组件限制禁止选择当前时间之前的时间

页面代码 <el-date-pickerv-model"xxx.startTime"type"datetime"placeholder"请选择开始时间"value-format"YYYY-MM-DD HH:mm:ss"clearable:disabledDate"disabledDateFn":disabled-hours"disabledHours":dis…...

嵌入式科普(33)深度解析C语言中的const和volatile关键字

1. 关键字基础概念 const&#xff1a;定义"只读变量"&#xff0c;被修饰的变量不可被程序修改 volatile&#xff1a;提醒编译器该变量可能被意外修改&#xff0c;禁止编译器优化 九、e2studio VS STM32CubeIDE之const修饰BSP函数的形参 嵌入式科普(23)指向寄存器的…...

DIP的实际举例

SOLID原则。 依赖倒置原则&#xff08;DIP&#xff09;的核心是高层模块不应该依赖于低层模块&#xff0c;二者都应该依赖于抽象&#xff08;接口或抽象类&#xff09; 例如&#xff0c;随着业务的发展&#xff0c;订单总金额的计算规则可能需要根据不同的客户类型或促销活动…...

【GESP】C++二级真题 luogu-b3955, [GESP202403 二级] 小杨的日字矩阵

GESP二级真题&#xff0c;多层循环、分支语句练习&#xff0c;难度★✮☆☆☆。 题目题解详见&#xff1a;https://www.coderli.com/gesp-2-luogu-b3955/ 【GESP】C二级真题 luogu-b3955, [GESP202403 二级] 小杨的日字矩阵 | OneCoderGESP二级真题&#xff0c;多层循环、分支…...

python类型转换深浅拷贝

1.类型转换 1.1 int(x):转化为一个整数&#xff0c;只能转换由纯数字组成的字符串 float->int 浮点型强转整形会去掉小数点后面的数&#xff0c;只保留整数部分 a 1.2 print(type(a)) #<class float> b int(a) print(type(b)) #<class int>print(int…...

Kafka面试题汇总

基础篇 1、什么是 Apache Kafka&#xff1f;它的主要用途是什么&#xff1f; 2、Kafka 中的几个核心概念是什么&#xff1f;请简要说明每个概念的作用。 3、Kafka 的 Producer 和 Consumer 是如何工作的&#xff1f;它们之间的数据传递机制是什么&#xff1f; 进阶篇 1、K…...

window安装MySQL5.7

1、下载MySQL5.7.24 浏览器打开&#xff1a; https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包&#xff0c;解压到你想放到的目录下面&#xff0c;我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …...

什么是手机9008模式?如何进入9008

之前给大家分享了一些有关手机刷机的知识&#xff0c;今天给大家讲一讲如果刷机过程中不慎变砖应该如何应对&#xff08;当然了&#xff0c;希望大家都不会遇到&#xff09;&#x1f602;&#x1f604; 在给手机 Root 或刷机时&#xff0c;线刷 9008 指的是利用 高通 9008 模式…...

【jira】用到几张表

jira用到的几张表 测试计划&#xff0c;测试周期&#xff0c;测试用例&#xff0c;问题记录 1. 测试计划 # 记录表&#xff0c;查计划详情 SELECT ID,issuenum,SUMMARY FROM jiraissue where issuenum 22871# 测试计划下&#xff0c;测试周期&#xff0c;查测试周期id&…...

文件包含-session2

[题目信息]&#xff1a; 题目名称题目难度文件包含-session22 [题目考点]&#xff1a; 由于网站功能需求&#xff0c;会让前端用户选择要包含的文件&#xff0c;而开发人员又没有对要包含的文件进行安全考虑&#xff0c;就导致攻击者可以通过修改文件的位置来让后台执行任意…...

在 MySQL 的 InnoDB 存储引擎中,脏页(Dirty Page)的刷盘(Flush)时机

1. 后台线程周期性刷盘 触发机制&#xff1a; InnoDB 的 Page Cleaner 线程 会周期性地将脏页刷入磁盘&#xff0c;防止内存中脏页堆积。 触发条件&#xff1a; 脏页比例阈值&#xff1a;当 Buffer Pool 中脏页占比超过 innodb_max_dirty_pages_pct&#xff08;默认 90%&#…...

Vscode编辑器获取更新远程最新分支

解决&#xff1a;打开当前项目的终端&#xff0c;输入 git remote update origin --prune # 查看远程分支 git branch -r --prune --prune 参数告诉 Git 清理那些远程仓库中已经删除但本地仍然存在的跟踪分支。 命令作用 更新远程仓库引用&#xff1a; git remote update …...

`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格

以下是将更正后的表格放在最前面的回答&#xff0c;表格包含序号列&#xff0c;合并了后端 AdminAdminDTO 和前端 userSession 的所有字段&#xff0c;并标注对方没有的字段。token 字段值用省略号&#xff08;...&#xff09;表示&#xff1a; 序号字段名AdminAdminDTO (后端…...

存储引擎、索引(MySQL笔记第四期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 存储引擎概念InnoDB存储引擎MyISAM存储引擎Memory存储引擎存储引擎的选择 索引三种索引索引分类语法(创建/查看/删除)性能分析工具SQL执行频率慢查询日志profile详情explain执行计…...

全面汇总windows进程通信(二)

在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: 信号量(Semaphore)和互斥量(…...

【大模型】蓝耘智算云平台快速部署DeepSeek R1/R3大模型详解

目录 一、前言 二、蓝耘智算平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 应用场景 2.4 对DeepSeek 的支持 2.4.1 DeepSeek 简介 2.4.2 DeepSeek 优势 三、蓝耘智算平台部署DeepSeek-R1操作过程 3.1 注册账号 3.1.1 余额检查 3.2 部署DeepSeek-R1 3.2.1 获取…...

心理咨询小程序的未来发展

还在眼巴巴看着心理咨询行业的巨大蛋糕却无从下口&#xff1f;今天就来聊聊心理咨询小程序的无限潜力 据统计&#xff0c;全球超 10 亿人受精神心理问题困扰&#xff0c;国内心理健康问题也日益突出&#xff0c;心理咨询需求猛增。可传统心理咨询预约难&#xff0c;费用高&…...

硬件工程师入门教程

1.欧姆定律 测电压并联使用万用表测电流串联使用万用表&#xff0c;红入黑出 2.电阻的阻值识别 直插电阻 贴片电阻 3.电阻的功率 4.电阻的限流作用 限流电阻阻值的计算 单位换算关系 5.电阻的分流功能 6.电阻的分压功能 7.电容 电容简单来说是两块不连通的导体加上中间的绝…...

大模型本地部署硬件资源学习(包含模型微调所需资源)

大模型本地部署硬件配置学习 前言1.大模型应用需求分析扩展框架2.华为昇腾算力3.显卡信息汇总对比表4.大模型微调显卡资源指南&#xff08;Qwen系列与DeepSeek蒸馏模型&#xff09;一、Qwen系列模型微调显存需求二、DeepSeek-R1蒸馏模型微调显存需求三、显存优化策略与硬件选型…...

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法&#xff1a;小模型也可以很强大 一、DeepSeek概要 2024年&#xff5e;2025年初&#xff0c;DeepSeek …...

Java基础常见的面试题(易错!!)

面试题一&#xff1a;为什么 Java 不支持多继承 Java 不支持多继承主要是为避免 “菱形继承问题”&#xff08;又称 “钻石问题”&#xff09;&#xff0c;即一个子类从多个父类继承到同名方法或属性时&#xff0c;编译器无法确定该调用哪个父类的成员。同时&#xff0c;多继承…...

山东大学软件学院nosql实验四

实验题目&#xff1a; 使用Java做简单数据插入 实验内容 用API方式&#xff0c;做数据插入。 使用Java语言实现数据插入界面&#xff0c;为实验一建立的学生、教师、课程表插入数据&#xff0c;可以在前端界面中录入数据之后保存&#xff0c;也可以导入Excel中的数据。 实…...

Linux | man 手册使用详解

注&#xff1a;本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页&#xff0c;并使用 grep 命令过滤出包含特定关键字的行&#xff1a; man <package> | grep <keyword>在整个系统的手册页中…...

初阶数据结构(C语言实现)——1数据结构前言

1. 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 2.什么是算法&#xff1f; 算法(Algorithm):就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&#xff0c;并产生出一…...

Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式

Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序&#xff1a; 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…...

基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现

大家好&#xff0c;今天要和大家聊的是一款基于 SpringBoot 的 “电影交流平台小程序” 系统的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于 SpringBoot 的 “电影交流平台小程序” 系统设计与实现的主要使用者分为 管理员 和…...

工具方法 - 合规性矩阵

Compliance matrix &#xff08;合规性矩阵&#xff09;是产品需求管理中的一个重要工具&#xff0c;它是用来识别、跟踪、监控和组织所有客户和利益相关方需求是否被满足的工具。具体来说&#xff0c;Compliance matrix需要用一行一行的证据来证明被设计的产品针对每个需求的实…...