我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vuex详细介绍和使用方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vuex详细介绍和使用方法

一、什么是Vuex

官网解释如下:

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

那么什么是“状态管理模式”呢?

状态自管理应用包括以下几个部分:

  • state:驱动应用的数据源;
  • view:以声明方式将state映射到视图;
  • action:响应在view上的用户输入导致的状态变化;

看下面这张表示“单向数据流”理念的简单示意图:

从上面的图中可以看出:整个系统的数据流是单向的:数据(即state)去驱动视图(view)的更新,用户在view上面进行一些操作触发action,通过action去更新state,而不是视图直接更新state。

二、运行机制

下面来看一张官网上面的Vuex运行机制图:

从图中可以看出,Vuex不在和组件强相关。运行机制:Vuex提供数据(state),来驱动视图(这里指的是Vue组件),视图通过Dispatch派发Action,在Action中可以进一步做一些异步的操作(例如通过ajax请求后端的接口数据),然后通过Commit提交给Mutations,由Mutations去最终更改state。那么为什么要经过Mutations呢?这是因为我们要在Vue调试工具(Devtools)中记录数据的变化,这样可以通过插件去进行进一步的调试。所以说Mutations中只能是纯同步的操作,如果是有异步操作,那么就需要在Actions中进行处理。如果说没有异步操作,那么可以直接由组件进行Commit操作Mutations。如下图所示:

三、创建项目

1、使用脚手架搭建Vue项目

在命令行里面输入如下命令即可创建一个Vue项目:

vue init webpack vuex-demo

如下图所示:

然后回车进行安装,选择默认配置即可,出现如下面所示的界面表示创建成功:

2、安装Vuex

新创建的项目里面默认不会安装Vuex,如果要使用Vuex,需要进行手动安装,输入下面的命令:

npm install vuex --save

如下图所示:

注:--save表示进行全局安装

3、启动项目

在第一步创建成功项目以后,最后会提示如何启动项目,如下面所示:

这两行命令表示先进入项目的根目录,然后输入npm run dev命令即可启动项目,如下图所示:

在浏览器窗口里面输入:http://localhost:8080进行浏览:

4、配置使用Vuex

4.1、创建store文件夹

在class="lazy" data-src目录下面创建一个store文件夹,该文件夹用来存放所有与状态管理有关的文件,然后创建一个index.js文件,Store对象写在index.js文件里面,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);
// 创建store对象
const store=new Vuex.Store({
 
})
// 导出创建的store对象
export default store;

4.2、配置全局使用store对象

在main.js里面配置全局使用store对象:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
// 引入index.js文件
import store from './store/index'
 
Vue.config.productionTip = false
 

new Vue({
  el: '#app',
  router,
  store,// 配置全局使用store对象
  components: { App },
  template: '<App/>'
})

到此为止,一个Vuex项目创建完成,并且安装了Vuex,下面就可以使用该项目演示如何使用Vuex进行状态管理了。

四、Vuex核心概念

1、state

在index.js文件里面添加state,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);
 
// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}
 
// 创建store对象
const store=new Vuex.Store({
     // 添加state导出
     state
})
 
// 导出创建的store对象
export default store;  

在test.vue中使用展示初始值:

<template>
    <p>初始值:{{this.$store.state.num}}</p>
</template>

<script>
export default {
    name:'test'
}
</script>

页面效果:

注:还可以通过计算属性获取num的值:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果如图所示:

2、mutations

在上面使用了state可以获取到属性的值,那么如何修改state中属性的值呢?这时候就要用到mutations了。官网解释如下:

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和 一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。还是以上面的为例子。

修改index.js文件,添加mutations:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    }
}

// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations
})

// 导出创建的store对象
export default store;

修改test.vue文件:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

注:改变状态还可以传递参数进行修改,看下面的例子:

修改index.js文件如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations
})

// 导出创建的store对象
export default store;

test.vue修改如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

3、Getter

有时候我们需要从store中的state中派生出一些状态,例如根据num的值返回基数或者偶数。如果有多个组件需要用到这个状态,那么我们就需要在每个组件里面都定义重复的一个函数,或者是定义成一个公共的函数,然后在多个组件里面导入,这两种方式无论采用哪种都不是很理想的。这时候我们就需要用到getter了。官网解释如下:

Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。同样,Getter接受state作为第一个参数。看下面的例子:

修改index.js文件如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters
})

// 导出创建的store对象
export default store;

那么该如何访问getters呢?可以通过下面的几种方式进行访问:

3.1、通过属性进行访问

修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
   </div>
</template>

<script>
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        }
    }
}
</script>

效果:

3.2、通过辅助函数进行访问

vuex中提供了mapGetters辅助函数,mapGetters辅助函数仅仅是将store中的getter映射到局部计算属性:

修改text.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    }
}
</script>

效果:

可以看出:通过属性访问和通过辅助函数访问实现的效果是一样的。

4、Action

Vuex官网对Action的解释如下:

Action类似于Mutation,两者的不同之处在于:

  • Action提交的是Mutation,而不是直接变更状态。也就是说Action是用来管理Mutation的,执行顺序是先执行Action,然后通过Action来触发Mutation,最后在通过Mutation来变更状态。
  • Action中可以包含异步操作,Mutation中只能包含同步操作。

看下面的例子:

修改index.js如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         commit('ChangeState');
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

4.1、通过dispatch触发

修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            this.$store.dispatch('ExecChangeState');
        }
    }
}
</script>

效果:

下面看一下执行顺序:

分别在add()、ExecChangeState()、ChangeState()里面添加一句console.log()来查看执行顺序:

index.js修改如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        console.log("mutations");
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         console.log("actions");
         commit('ChangeState');
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

test.vue修改如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        }
    }
}
</script>

效果:

从上图可以看出执行顺序是:先执行组件中的方法,然后执行actions,最后在执行mutations,最终通过mutations更新状态。

4.2、通过辅助函数触发

除了使用dispatch()触发actions以外,还可以使用辅助函数mapActions,辅助函数mapActions将组件中的methods映射为store.dispatch。修改test.vue如下:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
        <!--通过辅助函数触发actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeState">通过辅助函数改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters, mapActions} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        },
        // 辅助函数 mapActions辅助函数将组件中的methods映射为store.dispatch
        // 这里表示将'this.ExecChangeState'映射为'this.$store.dispatch('ExecChangeState')'
        ...mapActions(['ExecChangeState'])
    }
}
</script>

效果:

到了这里,可能有人会问:通过actions的方式进行管理mutations比直接使用mutations更复杂了,为什么还要这么做呢?实际上并非如此,mutations只能执行同步方法,Action就不受此限制,我们可以在actions内部执行异步方法,看下面的例子:

修改index.js,添加异步方法,代码如下:

// 引入Vue
import Vue from 'vue'
// 引入Vuex
import Vuex from 'vuex'
// 添加全局引用
Vue.use(Vuex);

// 创建state
const state={
    // 定义num属性并赋初始值为1
    num:1
}

// 改变状态,通过commit
var mutations={
    // state作为第一个参数
    ChangeState(state){
        console.log("mutations");
        // 自增1
        state.num++;
    },
    // state作为第一个参数,para作为第二个参数
    ChangeStateWithPara(state,para){
        // 自增1
        state.num += para;
    }
}

// Getter,相当于store里面的计算属性
var getters={
     IsOddOrEven(state){
         return state.num % 2==0?'偶数':'奇数'
     }
}

// 用来管理mutations
var actions={
    ExecChangeState({commit}){
         // 执行mutations里面定义的ChangeState方法
         console.log("actions");
         commit('ChangeState');
    },
    // 执行异步方法:点击按钮5秒之后再改变属性的值
    ExecChangeStateAsync({commit}){
        setTimeout(() => {
           commit('ChangeState')
        }, 5000);
    }
}
// 创建store对象
const store=new Vuex.Store({
     // 添加state
     state,
     // 导出mutations
     mutations,
     // 导出getter
     getters,
     // 导出actions
     actions
})

// 导出创建的store对象
export default store;

修改test.vue文件:

<template>
   <div>
        <p>初始值:{{this.$store.state.num}}</p>
        <p>通过计算属性获取初始值:{{count}}</p>
        <button @click="$store.commit('ChangeState')">改变属性值</button>
        <button @click="$store.commit('ChangeStateWithPara',5)">传递参数改变属性值</button>
        <!--通过属性访问getters-->
        <p>通过属性访问getters:{{$store.getters.IsOddOrEven}}</p>
        <!--通过辅助函数访问getters-->
        <p>通过辅助函数访问getters:{{IsOddOrEven}}</p>
        <!--演示Action-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="add">通过action改变属性值</button>
        </div>
        <!--通过辅助函数触发actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeState">通过辅助函数改变属性值</button>
        </div>
        <!--执行异步actions-->
        <div>
            <p>属性值:{{count}}</p>
            <button @click="ExecChangeStateAsync">通过异步方法改变属性值</button>
        </div>
   </div>
</template>

<script>
// 导入辅助函数
import {mapGetters, mapActions} from 'vuex'
export default {
    name:'test',
    // 计算属性
    computed:{
        count(){
            return this.$store.state.num;
        },
        // 使用对象展开运算符将 getter 混入 computed 对象中,数组里面是在getters里面定义的方法名称,如果有多个
        // 则在数组里面添加多个即可
        ...mapGetters(['IsOddOrEven'])
    },
    methods:{
        add(){
            // 通过dispatch触发actions里面的ExecChangeState
            console.log("触发add()");
            this.$store.dispatch('ExecChangeState');
        },
        // 辅助函数 mapActions辅助函数将组件中的methods映射为store.dispatch
        // 这里表示将'this.ExecChangeState'映射为'this.$store.dispatch('ExecChangeState')'
        // 这里表示将'this.ExecChangeStateAsync'映射为'this.$store.dispatch('ExecChangeStateAsync')'
        ...mapActions(['ExecChangeState','ExecChangeStateAsync'])
    }
}
</script>

效果:

5、Module

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store对象就有可能变得相当臃肿。为了解决上面的问题,Vuex允许我们将store分割成模块(Module)。每个模块都有自己的state、mutation、action、getter。

五、总结

通过上面的基本讲解,了解了Vuex的一些基本用法,Vuex在进行状态管理方面很方便,但并不是说Vue项目中就一定要使用Vuex,在Vuex中也可以不使用Vuex。下面总结一下Vuex中的核心概念和底层原理

1、核心概念

  • State:this.$store.state.xxx  取值
  • Getter:this.$store.getters.xxx  取值
  • Mutation:this.$store.commit('xxx')  赋值改变状态,只能调用同步方法
  • Action:this.$store.dispatch('xxx')  赋值,不能直接更改状态,最后还是要通过commit更改状态,可以操作异步方法。
  • Module:模块

2、底层原理

  • State:提供一个响应式数据;
  • Getter:借助Vue的计算属性computed来实现缓存;
  • Mutation:更改State状态;
  • Action:触发mutation方法;
  • Module:Vue.set动态添加state到响应式数据中;

到此这篇关于Vuex详细介绍和使用方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vuex详细介绍和使用方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

fastjson 使用方法详细介绍

Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。1、遵循http://json.org标准,为其官方网站收录的参考实现之一。2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collecti
2023-05-30

详细介绍Github的使用方法

随着互联网技术的不断发展,越来越多的开发者开始加入到开源项目中,Github作为目前全球最大的代码托管平台之一,也成为了开发者们分享、学习、合作的重要工具之一。然而,如何使用Github来进行代码管理、版本控制、协作开发等,还是很多新手开发
2023-10-22

equals()方法和hashCode()方法(详细介绍)

Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。本文介绍了2种方法在使用和
equals()方法和hashCode()方法(详细介绍)
2014-05-14

Maven使用方法详及方式详细介绍

使用maven仓库的话需要从网上下载maven的包,比如“apache-maven-3.5.4-bin.tar”,下载完成之后解压,在解压的文件夹中的conf目录下的settings.xml文件夹下就可以配置maven远程仓库和本地仓库的地址
2022-11-13

Android Service中方法使用详细介绍

service作为四大组件值得我们的更多的关注 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务。例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意
2022-06-06

Java 方法(详细介绍)

那么什么是方法呢?Java方法是语句的集合,它们在一起执行一个功能。 (推荐学习:java课程)方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点1. 使程序变得更简短而清晰。2.
Java 方法(详细介绍)
2017-06-19

Android onCreate( )方法详细介绍

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreat
2022-06-06

vue中keepAlive组件的作用和使用方法详细介绍

这篇文章主要讲解了“vue中keepAlive组件的作用和使用方法详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中keepAlive组件的作用和使用方法详细介绍”吧!前言在面试
2023-06-20

React中setState/useState的使用方法详细介绍

这篇文章主要介绍了React中setState/useState的使用方法,useState和setState在React开发过程中使用很频繁,但很多人都停留在简单的使用阶段,并没有正在了解它们的执行机制
2023-05-14

Mysql优化方法详细介绍

MySQL的优化指的是一个很大的系统,面试的时候我之前是从sql的语句优化方面去说的,这种优化也有作用,不过是从逻辑方面去优化,下面这篇文章主要给大家介绍了关于MySQL查询缓存优化的相关资料,需要的朋友可以参考下
2023-02-03

MySQL中Binlog日志的使用方法详细介绍

MySQLBinlog(二进制日志)记录数据库操作,用于数据复制、数据恢复和审计。启用后,记录修改操作并写入Binlog。通过不同格式和管理命令,可查看和管理Binlog。在主从复制中,Binlog用于同步数据变更。Binlog也可用于数据恢复,通过应用日志将数据库恢复到特定时间点。此外,Binlog可作为审计记录,提供操作历史、用户和时间等信息。建议始终启用Binlog,定期备份,监视大小,进行跨服务器复制和审计。
MySQL中Binlog日志的使用方法详细介绍
2024-04-02

编程热搜

目录