IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 不同环境 和 veux -> 正文阅读

[JavaScript知识库]不同环境 和 veux

不同环境设置

场景

1 开发环境  http://localhost:3000
2 生产环境  http://localhost:4000

目的:

当环境更改后,能够读取对应的变量,不会因为环境的切换导致,程序员又得不停的更改代码

使用:

在项目的根目录(不是src)下 新建以下文件:(文件名都是关键词-固定的)

.env.development   ---只要在开发环境中,程序才会执行读取 npm run serve
.env.production  ---只要在生产环境中,程序才会执行读取 npm run build
.env   --无论是开发环境还是生产环境,程序都会执行读取


语法:

1 定义:

NODE_ENV  和   VUE_APP_自定义变量

注释: # 
NODE_ENV="开发环境"


VUE_APP_自定义变量1="值1"
VUE_APP_自定义变量2="值2"



2 引用: 在任意位置(js、vue等使用)

process.env.VUE_APP_自定义变量

自定义env文件

以上的.env.production和.env.development文件名和功能都是固定,如果需求中带有很多环境设置,那么就需要我们自己来定义文件了

语法:项目根目录中新建.env.xx

定义和使用的语法同上

配置:package.json:
 "scripts": {
    "自定执行名": "vue-cli-service serve/build --mode env文件名的后缀名",
    
    
Demo:
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "serve-a":"vue-cli-service serve --mode a",   运行 npm run serve-a    开发环境
    "build-b":"vue-cli-service build --mode b"     运行 npm run build-b    生产环境
  },   

VUEX

概念: vuex叫做状态管理模式(简称为状态机)
状态:数据/方法
作用: vuex本质就是前端中的一个独立的仓库,我们能够把属性、方法放进该仓库中,任何组件都能够随时的访问
场景:如果多个组件都在共享一个数据时,我们可以把数据放进仓库中
比如:登录成功后userInfo

路由安装

vue  add  vuex

结构

src
  store
    index.js:
    	import Vue from 'vue'
        import Vuex from 'vuex'
        Vue.use(Vuex)
        //暴露仓库对象
        export default new Vuex.Store({
          state: {
          },
          getters: {
          },
          mutations: {
          },
          actions: {
          },
          modules: {
          }
        })
        
        
        
        
    main.js:
    import Vue from 'vue'
	import store from './store'
	new Vue({
      //注入
      router,
      store,
      render: h => h(App)
    }).$mount('#app')

Vuex 核心属性

 state:    存储公共属性
 getters:  存储公共的计算属性---用的不多
 mutations: 存储公共方法,该方法只能是更改state的方法
 actions:   存储公共方法,该方法存储的一般都是异步方法,比如登录、注册、查询学生
 modules:   分模块

语法:

组件中:this.$store  来后去仓库对象

1 state 公共属性

store/index.js

export default new Vuex.Store({
  state: {
    name:"张三",
  },

vue:

注意:组件一定要使用计算属性来获取仓具的数据,原因:如果今后仓库发生了改变,则组件也会同步

   computed:{
        name(){
            return this.$store.state.name
        }
   },

2 getters 公共计算属性 —了解

store/index.js

  state: {
    n1:1,
    n2:2
  },
  getters: {
       //第一个参数就是state对象
      sum(state){
        return state.n1+state.n2
      }
  },

vue:

   computed:{
        
        sum(){
            return this.$store.state.n1+this.$store.state.n2
        }
   },

3 mutations 存储方法 --commit

该属性定义的方法是用来修改state数据的方法,也是修改state数据的唯一手段

store/index.js

  state: {
    name:"张三",
  },
 
  mutations: {
    //参:1:state对象
    //参数2:接受的参数
    CHANGE_NAME(state,data){
        state.name=data
    }

  },

vue:

 this.$store.commit("CHANGE_NAME",this.t)

练习:

1  在仓库中定义一个name
2  在组件中渲染name
3 组件能够通过文本框和按钮来修改name,修改后,组件也必须要同步
4 仓库中定义n1,n2以及计算属性sum,组件中渲染sum,也能够通过文本框和按钮修改n1和n2

4 actions 存储方法 --dispatch

该属性中定义的方法一般都是公共的异步请求的方法

demo:为公共的stus赋值

方式1:组件中调用actions+mutations:—不推荐

store/index.js:

 state: {
    stus: []
  },
  mutations: { 
    CHANGE_STUS(state, data) {
      state.stus = data
    },

  },
  actions: {
    //store  :代表整个仓库对象 ==this.$store
    //data:传递过来的参数
    getStus(store, data) {
      console.log(data);
      return axios({
        url: "/stus/getStus",
        method: "get",
      })
    }

  },

vue:

{{stus}}

computed:{
        stus(){
            return this.$store.state.stus
        }
   },
 async created(){
      //调用公共actions获取学生
      let res=await   this.$store.dispatch('getStus','测试数据')
      console.log(res.stus);
      //调用公共mutations来修改state
       this.$store.commit("CHANGE_STUS",res.stus)
   }
}

方式2:组件中调用actions

store/index.js:

 state: {
    stus: []
  },
  mutations: { 
    CHANGE_STUS(state, data) {
      state.stus = data
    },

  },
  actions: {
    //store  :代表整个仓库对象 ==this.$store
    //data:传递过来的参数
   async getStus(store, data) {
       let res=await axios({
        url: "/stus/getStus",
        method: "get",
      })
      //调用mutations来设置数据的值
      store.commit("CHANGE_STUS",res.stus)
    
    }
  },

vue:

{{stus}}

computed:{
        stus(){
            return this.$store.state.stus
        }
   },
created(){
      //调用公共actions获取学生
       this.$store.dispatch('getStus','测试数据')
    
   }
}

辅助函数(语法糖)–只能用于组件中

我们可以通过更简便的语法来访问、操作仓库

mapState   -- 写在computed中
mapGetters  -- 写在computed中
mapMutations  --写在methods中
mapActions   --写在methods中

语法:
...mapXxxx(['仓库中的属性或方法'])
记住:仓库中的属性和方法不要和本身组件的属性和方法重名

使用:

<script>
import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
export default {
  computed: {
    ...mapState(['name','stus']), 
    ...mapGetters(['sum'])
  },
  methods: {
    ...mapMutations(['CHANGE_NAME']),
    ...mapActions(['getStus']),

  },

demo:

vue:

<template>
  <div>
    <h1>Home2</h1>
    {{name}}--{{sum}}
    <hr>
    <button @click="change">change</button>
    <hr>
    {{stus}}
  </div>
</template>



<script>
import {mapState,mapMutations,mapGetters,mapActions} from 'vuex'
export default {
  computed: {
    ...mapState(['name','stus']), 
    ...mapGetters(['sum'])
  },
  methods: {
    ...mapMutations(['CHANGE_NAME']),
    ...mapActions(['getStus']),
    change(){
        this.CHANGE_NAME('李四')
    }
  },
  created() {
    this.getStus();
  },
};
</script>

<style>
</style>

store/index.js:

import api from '@/http/api'
import Vue from 'vue'
import Vuex from 'vuex'

import axios from '../http/axios.js'

Vue.use(Vuex)

//暴露仓库对象
export default new Vuex.Store({
  state: {
    name: "张三",
    n1:1,
    n2:2,
    stus: []
  },
  getters: {
    sum(state) {
      return state.n1 + state.n2
    }
  },
  mutations: {
    //参:1:state对象
    //参数2:接受的参数
    CHANGE_NAME(state, data) {
      state.name = data
    },
    CHANGE_STUS(state, data) {
      state.stus = data
    },
  },
  actions: {  
    //store  :代表整个仓库对象 ==this.$store
    //data:传递过来的参数
    async getStus(store, data) {
      
       let res=await axios({
        url: "/stus/getStus",
        method: "get",
      })
      //调用mutations来设置数据的值
      store.commit("CHANGE_STUS",res.stus)
     
     
    }

  },
  modules: {
  }
})

5 modules 模块化

仓库也可以按照模块划分,便于管理

步骤:

1 新建模块

在 store/新建modules目录,然后在该目录下新建模块名,比如stus.js等

2 编辑index.js


import stus from './modules/stus.js'

//暴露仓库对象
export default new Vuex.Store({
  modules: {
    stus
  }
})

3 编辑stus.js

export default {

	//命名空间
    //state在不同模块中是可以取重复名字的,但是
    // getters、mutations、actions以上三个属性就算在不同模块中也不能取重复名字,否则报错,因此就需要
    //在每一个模块中添加namespaced:true,程序就会通过路径来区分,继而我们可以在不同模块能够取相同名字
    namespaced:true,
    
    state:{},
    getters:{},
    mutations:{},
    actions:{}

}

使用模块化之后的仓库

情况1:在组件中通过辅助函数使用

vue:

import {createNamespacedHelpers} from 'vuex'
//参数就是模块名
let {mapState,mapActions}=createNamespacedHelpers("stus")

export default {
  computed: {
    ...mapState(['name','stus'])
  },
  methods: {
    ...mapActions(['getStus']),
  },

一个组件中也能够使用多个模块,比如stus和clas

import {createNamespacedHelpers} from 'vuex'
//参数就是模块名
let {mapState:mapState_stus,mapActions:mapActions_stus}=createNamespacedHelpers("stus")
let {mapState:mapState_clas,mapActions:mapActions_clas}=createNamespacedHelpers("clas")
export default {
  computed: {
    ...mapState_stus(['name','stus']),
    ...mapState_clas(['clas'])
  },
  methods: {
    ...mapActions_stus(['getStus']),
    ...mapActions_clas(['getClas']),
  },

情况2:在js中使用

操作state       仓库对象.state.模块.属性
操作getters     仓库对象.getters.模块.属性
操作mutations   仓库对象.commit("模块/mutations中的方法名",参数)
操作actions     仓库对象.dispatch("模块/actions中的方法名",参数)
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:24:08  更:2022-10-17 12:24:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 18:47:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码