[30天 Vue学好学满 DAY19] Vuex -2

State

定义状态 store.js

state: {
    // 待办事项
    todoList: ["待办事项A", "待办事项B"]
}

於元件中使用
因stre中状态具响应式,直接於 计算属性(computed) 中引入。

HTML

<li v-for="item in todoList" :key="item">
    {{ item }}
</li>

import

import store from "./store/store.js";

计算属性

computed: {
    todoList () {
      return store.state.todoList;
    }
}

起前端验证

https://ithelp.ithome.com.tw/upload/images/20210919/201295367C7FxDpc7Y.png


mapState辅助函数

取代 return store.state.xxx
自订计算属性需透过 ...

import { mapState } from 'vuex'

export default {
    ...others
    computed: {
        ...mapState(['todoList'])
    }
    
};

Getter

store的计算属性,接受state作为第一个参数
state 的 todoList进行微调

todoList: [
    { id: 1, text: '待办事项A', done: true },
    { id: 2, text: '待办事项B', done: false }
],

定义Getter

getters: {
    // vuex 中的计算属性
    doneTodos: state => {
        return state.todoList.filter(todo => todo.done)
    }
}

以其他getter作为参数

getters: {
    // vuex 中的计算属性
    doneTodos: state => {
        return state.todoList.filter(todo => todo.done)
    },
    // 以其他getter作为参数
    // 透过 state 才可使用 length 函数
    doneTodosCount: (state, getters) => {
        return getters.doneTodos.length
    }
}

元件计算属性

todoList() {
    return store.getters.doneTodos;
},
totalDone() {
    return store.getters.doneTodosCount;
},

起前端验证

https://ithelp.ithome.com.tw/upload/images/20210919/20129536h7GqYtCwhA.png


透过方法访问Getter
定义方法於getter

gettodoById: (state) => (id) => {
    return state.todoList.find((todo) => todo.id === id);
},

元件计算属性

store.getters.getTodoById(1)
// -> { id: 1, text: '待办事项A', done: true }

mapGetters 辅助函数

同 mapState

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters([
      'doneTodos',
      'doneTodosCount'
    ])
  }
}

於不同元件,重新定义getter名称

...mapGetters([
      doneTodeA: 'doneTodos',
])

剩下留给明天吧
/images/emoticon/emoticon06.gif


有错误请不吝指教!
参考资料
https://vuejs.org/v2/guide
https://medium.com/itsems-frontend/vue-vuex1-state-mutations-364163b3acac
https://ithelp.ithome.com.tw/articles/10185686
https://ithelp.ithome.com.tw/articles/10237349
https://medium.com/itsems-frontend/vue-vuex4-modules-ddb3eec6b834
感谢各路大神
/images/emoticon/emoticon31.gif


<<:  Flutter基础介绍与实作-Day5 Dart语法介绍(2)

>>:  【後转前要多久】# Day04 HTML - 元素属性、以及Emmet语法

【Day22】 Transformer 新手包 (二)

Query,Key,Value 在昨天我们有提到 "自" 注意力机制,现在我们更...

Day 12:Commitizen

话说今天本来是打算要接着昨天的进度纪录架设 grafana 的 dashboard,可是昨天半夜 d...

Day08 SwiftUI 01 - Life Cycle : UIKit App Delegate

在 2019 年时,Apple 推出了两套强大的框架分别是 SwiftUI 以及 Combine,而...

服务自动化中提高效率真的好吗?

这次做的微型仓储系统的时候,初期系统是以单电梯设计的,後来爲了提高效率,改成了双电梯; 这就像是有一...

Day 28 - 到客户端执行弱点扫瞄并修复的心得分享 第十五天

今天是到客户端处理弱点的第15天,而铁人赛剩下倒数3天了。 继续加油下去中风险等级也快要修完了,今天...