vuex 新手筆記

安裝vuex

npm install --save vuex

基本的vuex引入

// ./store/store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export const store = new Vuex.Store({
    state: {
       counter : 0
    },
    getters: {
       getCounter: state => { return state.counter; },
       getCounterStr: state => { return state.counter + ' counts'; }
    },
    mutations: {
       increment: state => { state.counter++; },
       decrement: state => { state.counter--; },
    },
    // actions
})
// ./main.js
import Vue from 'vue'
import App from './App.vue'
import {store} from './store/store'

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

state和getters及使用mapGetters配合ES6的object spread方式取store裡面state的值

import { mapGetters } from "vuex";
export default {
  computed: {
    ...mapGetters(["getCounter", "getCounterStr"]),
counter(){
return this.$store.getters.getCounter;
// return this.$store.state.counter;
} } };

如果是用CLI2且要在專案裡面使用object spread這功能,我們會需要引入babel-preset-stage-2

npm install --save-dev babel-preset-stage-2
// .babelrc
{
  "presets": [["es2015", { "modules": false }], ["stage-2"]]
}

mutations同樣也有mapMutations可以使用

import { mapMutations } from "vuex";
export default {
  methods: {
    ...mapMutations(["increment", "decrement"])
  }
};

mutations不能在非同步的狀態下呼叫。假設 mutations裡面的increment是在setTimeout裡面,過1秒後才呼叫callback去改state.counter,如果同時有多個元件呼叫increment,那麼state.counter的狀態將會錯亂,所以mutations建議只在同步底下呼叫。這時候我們可以使用actions,而也是一個好的習慣不管同步非同步都是先call actions,然後在從actions裡面去commit mutations。

// actions
increment: context => {
  context.commit('increment');
},
decrement: ({commit}) => {
  commit('decrement');
},
asyncIncrement: ({commit}) => {
  setTimeout(() => {
  commit('increment');
  }, 1000);
},
asyncDecrement: ({commit}) => {
  setTimeout(() => {
  commit('decrement');
  }, 1000);
}

actions 回傳一個callback function帶著context參數 (如increment),我們也可以用ES6的語法省略掉context,直接使用commit。當然 actions也有mapActions可以使用。

import { mapActions } from "vuex";
export default {
  methods: {
    ...mapActions (["increment", "decrement"])
  }
};

mutations, actions帶參數的寫法。payload可以是值也可以是物件

// mutations
increment: (state, payload) => { state.counter += payload; }

// actions
increment: ({commit}, payload) => { commit('increment'); }
// template
<button @click="increment(10)">Increment</button>
<!-- <button @click="increment({'by':10, 'duration': 1000})">Increment</button> -->

如果要使用two-way-binding如v-model,那原本的computed method可以做以下修改。

computed: {
    counter(){
       get(){
          return this.$store.getters.getCounter;
       },
       set(value){
// pretend updateValue is a method inside actions this.$store.dispatch('updateValue', value); } } }

我們可以把new Vuex.Store({…})裡面的getters, mutations…等方法以模塊的方式引入,詳情參考這裡

如果使用模塊方式引入,那在getters, mutations, actions…等裡面的方法名稱有可能重複,這時候可以使用namespacing的方式解決,詳情參考這裡

Reference

  • https://vuex.vuejs.org/zh/guide/
  • https://github.com/vuejs/vuex/releases/tag/v2.1.0

npm & vue cli 新手筆記

安裝套件

npm install [-g|--save|--save-dev] {package_name} 
-g 全域
--save 專案本身 (含prod &dev)
--save-dev 專案本身 (dev only)
npm install -g @vue/cli ( vue-cli 3)
npm install -g vue-cli (vue-cli 2)  

下載modules (需下這個指令才會把package download下來)

npm install

 使用vue-cli2建立專案

vue init {template_name} {project_name} 
template name: webpack, webpack-simple, browserify, browserify-simple, simple

 使用vue-cli3建立專案

vue create {project_name}

 使用vue-cli3 UI建立專案

vue ui

 在vue-cli3底下使用vue init方式建立專案

vue install -g @vue/cli-init

顯示完整資訊

常用Git指令

列出所有local, remote的分支
$ git branch -a

顯示遠端branch狀態
$ git remote show origin

更新遠端分支列表
$ git remote update origin –prune

Local間切換分支
$ git checkout <branch>

Local新建並切換分支
$ git checkout -b <branch>
從Remote新建並切換分支
$ git checkout -b <new_branch> origin/<remote_branch>

更新分支
$ git pull –ff-only
$ git pull origin <遠端分支名>:<本地分支名>
$ git pull origin <branch>
$ git pull origin <branch> –ff-only

顯示完整資訊

讀書心得《哈拉瑞「人類三部曲」系列》

《人類大歷史》跟《人類大命運》兩本老老早就買了,但遲遲沒機會閱讀,甚至被我遺忘在書櫃許久,直到第三部曲《21世紀的21堂課》的出現,才果斷一口氣把三本讀完。作者哈拉瑞用智人來統稱我們現代人類,並用歷史的演化來一步步說明為何智人可以成為萬物食物鏈的最頂端。而在二部曲中,作者敘述著智人的行為如何造就了現代種種類型的社會,並根據這樣的行為來預測智人未來可能的發展走向。而在最後一部曲中則是用21個議題來提醒活在21世紀的我們所該意識到的現實。恩,三本厚厚的書內容當然不可能被我用三句話草草結束,詳細的介紹還是要自己看過才知道。

顯示完整資訊

在centos6使用yum安裝mysql5.7筆記

在centos6上面使用yum安裝任意版本的mysql,這邊以mysql5.7為例。

大致步驟如下:

  1. 更新yum的repository (yum mysql的來源)
  2. 改變repository裡的來源版本 (預設都是吃latest)
  3. 確認無誤後,用yum直接安裝mysql-community-server
  4. 安裝成功後,做第一次登入並改變密碼
  5. 開啟遠端連線的權限
  6. 修改密碼強度policy,和預設db編碼
  7. 基本安裝完成

顯示完整資訊