超簡單入門Vuex小示例

寫在前面

本文轉載自掘金上面的一篇博客,原文地址爲: 超簡單入門Vuex小示例,項目源代碼我已經託管到github上面,源代碼地址爲:https://github.com/ccf19881030/vuexexample,碼雲地址爲:https://gitee.com/havealex/vuexexample
你可以使用git命令從github上獲取vuexexample源代碼

git clone https://github.com/ccf19881030/vuexexample.git

從碼雲上獲vuexexample取代碼:

git clone https://gitee.com/havealex/vuexexample.git

本文旨在通過一個簡單的例子,練習vuex的幾個常用方法,使初學者以最快的速度跑起來一個vue + vuex的示例。

學習vuex需要你知道vue的一些基礎知識和用法。相信點開本文的同學都具備這個基礎。

另外對vuex已經比較熟悉的大佬可以忽略本文。

生成基於vue的項目

前提是在自己的系統中安裝好了Node.js、npm、cnpm等工具,並且配置好了相關的環境變量,然後選擇一個趁手的IDE編輯器,我使用的是VSCode。
基於vue-cli腳手架生成一個vue項目,vue-cli是Vue.js 開發的標準工具。
目前vue-cli腳手架已經更新到4.3.1版本,和之前Vue-cli 2.x版本創建項目的方式有一點不同,具體可以參考Vue CLI官網
使用vue-cli 4.x安裝@vue/cli依賴,如下:

起步

  • 安裝
npm install -g @vue/cli
# OR
yarn global add @vue/cli
  • 創建一個項目:
vue create my-project
# OR
vue ui

vue-cli 4.x提供了兩種創建vue項目的方式,使用vue create命令可以使用命令行創建vue項目,而使用vue ui命令則可以通過ui界面創建vue項目。

關於vue-cli 4.x創建vue項目可以參考創建一個項目,關於老版本的 vue-cli 文檔請移步這裏
本人使用的是Windows10操作系統,使用VSCode編輯器,使用的node、npm、cnpm、vue-cli版本信息如下圖所示:
環境變量

vue create

運行以下命令來創建一個新項目vuexexample:

vue create vuexexample

你會被提示選取一個 preset。你可以選默認的包含了基本的 Babel + ESLint 設置的 preset,也可以選“手動選擇特性”來選取需要的特性。
vue create
選擇默認的default (babel, eslint)選項,接着會創建一個基本的vue項目結構,如下圖所示:
vue create創建項目
然後按上圖執行項目,進入vuexexample項目根目錄並使用npm run serve命令啓動vuexexample項目:

cd vuexexample
npm run serve

運行項目
打開瀏覽器如Chrome,在地址欄中輸入http://localhost:8080,項目如下圖所示:
運行項目
vue create 命令有一些可選項,你可以通過運行以下命令進行探索:

vue create --help
用法:create [options] <app-name>

創建一個由 `vue-cli-service` 提供支持的新項目


選項:

  -p, --preset <presetName>       忽略提示符並使用已保存的或遠程的預設選項
  -d, --default                   忽略提示符並使用默認預設選項
  -i, --inlinePreset <json>       忽略提示符並使用內聯的 JSON 字符串預設選項
  -m, --packageManager <command>  在安裝依賴時使用指定的 npm 客戶端
  -r, --registry <url>            在安裝依賴時使用指定的 npm registry
  -g, --git [message]             強制 / 跳過 git 初始化,並可選的指定初始化提交信息
  -n, --no-git                    跳過 git 初始化
  -f, --force                     覆寫目標目錄可能存在的配置
  -c, --clone                     使用 git clone 獲取遠程預設選項
  -x, --proxy                     使用指定的代理創建項目
  -b, --bare                      創建項目時省略默認組件中的新手指導信息
  -h, --help                      輸出使用幫助信息

使用圖形化界面

你也可以通過 vue ui 命令以圖形化界面創建和管理項目:

vue ui

上述命令會打開一個瀏覽器窗口,並以圖形化界面將你引導至項目創建的流程。
vue ui
按上圖所示:打開瀏覽器在地址欄中輸入http://localhost:8000
使用圖形用戶界面創建vue項目,如下圖所示:
vue ui創建項目
打開【vue項目管理器】,選擇項目所在目錄,創建一個項目vuexexample,並且安裝相應的依賴。
vue ui創建項目2
如上圖所示,項目名稱爲vuexexample2,所在目錄爲:F:\rate\nodeWeb\vuex_demo
點擊右下角的【下一步】,
vue ui創建項目 3
選擇默認的預設:babel,eslint,再點擊右下角的【創建項目】
vue ui創建項目 4
vue ui創建項目 4
對應的命令行中會運行創建項目的命令,創建項目模板。

進入項目目錄,使用npm run serve先試着跑一下。

一般不會出現問題,試跑成功後,就可以寫我們的vuex程序了。

使用vue完成的示例

安裝vuex

使用VScode工具打開剛創建的vuexexample項目,如下圖所示:
VSCode
使用vuex首先得安裝vuex,在VSCode中打開終端,進入到vuexexample根目錄,執行如下命令:

cnpm install vuex --save

cnpm install vuex --save
介紹一下我們的超簡單Demo,一個父組件Parent,一個子組件Child,父組件有一個數據,子組件有一個數據,想要將這兩個數據都放置到vuex的state中,然後父組件可以修改自己的和子組件的數據。子組件可以修改父組件和自己的數據。

代碼文件介紹

  • store/index.js文件
    在根目錄src目錄下創建一個store文件夾,然後新建一個index.js文件,源代碼如下:
import Vue from 'vue'
import Vuex from 'vuex';

Vue.use(Vuex)

const state = {
    parentText: '父組件原始文本',
    childText:"子組件原始文本"
}

const mutations = {
    changeParentText(state, str){
        state.parentText = str;
    },
    changeChildText(state, str){
        state.childText = str;
    }
}

const store = new Vuex.Store({
    state: state,
    mutations: mutations
})

export default store;

然後在components目錄下刪除HelloWorld.vue,創建Parent.vue和Child.vue這兩個文件。

  • Parent.vue組件
<template>
    <div class="parent">
        <h3>這裏是父組件</h3>
        <button type="button" @click="onChangeParentText">修改自己文本</button>
        <button type="button" @click="onChangeChildText">修改子組件文本</button>
        <div>ParentText: {{ msg }}  </div>
        <child></child>
    </div>
</template>

<script>
    import Child from './Child.vue'

export default {
   computed: {
       msg () {
           return this.$store.state.parentText;
       }
   },
   methods: {
       onChangeParentText() {
           this.$store.commit('changeParentText', '父組件修改自己後的文本');
       },
       onChangeChildText() {
           this.$store.commit('changeChildText', '父組件修改子組件後的文本');
       }
   },
   components: {
       'child': Child
   }
}
</script>

<style scoped>
    .parent{
        background-color: #00BBFF;
        height: 400px;
    }
</style>
  • Child.vue子組件
<template>
    <div class="child">
        <h3>這裏是子組件</h3>
        <div>childText: {{msg}}</div>
        <button type="button" @click="onChangeParentText">修改父組件文本</button>
        <button type="button" @click="onChangeChildText">修改自己文本</button>
    </div>
</template>

<script>
    export default {
        name: "Child",
        computed:{
            msg(){
                return this.$store.state.childText;
            }
        },
        methods: {
            onChangeParentText(){
                this.$store.commit("changeParentText", "子組件修改父組件後的文本");
            },
            onChangeChildText(){
                this.$store.commit("changeChildText", "子組件修改自己後的文本");
            }
        }
    }
</script>

<style scoped>
    .child{
        background-color: palegreen;
        border:1px solid black;
        height:200px;
        margin:10px;
    }
</style>
  • 修改App.vue
    將HelloWorld.vue組件移除掉,換成Parent.vue
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <Parent msg="Welcome to Your Vue.js App"></Parent>
  </div>
</template>

<script>
import Parent from './components/Parent.vue'

export default {
  name: 'App',
  components: {
    Parent
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
  • main.js
  • 修改main.js文件,引入store/index.js,並將vuex注入到Vue實例中,這樣在Parent.vue和Child.vue組件中可以使用vuex做狀態提交等操作。
import Vue from 'vue'
import App from './App.vue'
import store from './store/index.js'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
  store
}).$mount('#app')

運行vuexexample項目

npm run serve
npm run serve
最終項目的運行初始效果圖如下圖所示:
111

  • 如果想通過父組件觸發子組件的數據,就點“改變子組件文本”按鈕,點擊後效果如下:
    2222
  • 如果想通過子組件修改父組件的數據,就在子組件點擊“修改父組件文本”按鈕,點擊後效果如下:
    3333

後記

通過該vuex示例,瞭解vuex的常用配置及方法調用。希望對不怎麼熟悉vuex的同學快速上手vuex項目有點幫助。
編程重在實踐,趕緊去跑一下吧。
爲了方便,我將完整的項目上傳到github上,源代碼地址爲:https://github.com/ccf19881030/vuexexample,,碼雲地址爲:https://gitee.com/havealex/vuexexample

你可以使用git命令從github上獲取源代碼

git clone https://github.com/ccf19881030/vuexexample.git

從碼雲上獲取項目源代碼:

git clone https://gitee.com/havealex/vuexexample.git

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章