一、如何获取vuex-state中的数据

  1. <script>
  2. export default {
  3. name: 'home',
  4. mounted(){
  5. console.log(this.$store.state.city)
  6. },
  7. computed:{
  8. city(){
  9. return this.$store.state.city;
  10. }
  11. }
  12. }
  13. </script>

二、在组件中向vuex派发一个事件

  1. methods:{
  2. handleClick(city){
  3. this.$store.dispatch("changeCity",city)
  4. console.log(city)
  5. }
  6. }

`tips:@click.native //给组件事件必须加上native修饰符``

三、vuex的工作流

1、在组件通过点击事件给vux中的actions发送一个事件同时传递一个参数

  1. methods:{
  2. handleClick(city){
  3. /* this.$store.dispatch 向vuex派发一个事件,同时传递一个参数 */
  4. this.$store.dispatch("changeCity",city)
  5. }
  6. }

2、vue actions中接受dispatch发送过来的事件和参数

  1. export default new Vuex.Store({
  2. ...
  3. actions: {
  4. changeCity(ctx,city){
  5. /* ctx表示上下文 this.$store
  6. city是自定义事件传递过来的参数 */
  7. 3.actions中使用commit方法向mutations提交一个事件,同时传递一个参数
  8. ctx.commit("toggleCity",city)
  9. }
  10. }
  11. })

3、在mutations中接收commit方法提交过来的事件,同时改变state中的状态

  1. export default new Vuex.Store({
  2. state: {
  3. city:"武汉"
  4. },
  5. mutations: {
  6. toggleCity(state,city){
  7. state.city = city;
  8. }
  9. }
  10. })

vuex.png

四、数据持久化

  1. function getCity(){
  2. let defaultCity = "武汉";
  3. if(localStorage.getItem("city")){
  4. defaultCity = localStorage.getItem("city")
  5. }
  6. return defaultCity;
  7. }
  8. export default new Vuex.Store({
  9. state: {
  10. city:getCity()
  11. //设置
  12. },
  13. mutations: {
  14. changeCity(state,city){
  15. state.city = city;
  16. }
  17. },
  18. actions: {
  19. changeCity(ctx,city){
  20. ctx.commit("changeCity",city)
  21. localStorage.setItem("city",city)
  22. }
  23. },
  24. modules: {
  25. }
  26. })