当前位置:   article > 正文

Nuxt3+pinia+pinia-plugin-persist(踩坑指南)_nuxt3中清除pinia持久化的数据

nuxt3中清除pinia持久化的数据

原文地址:Nuxt3+pinia+pinia-plugin-persist(踩坑指南)_梨花炖海棠的博客-CSDN博客

最近在做一个PC端的项目,准备使用nuxt3+pinia来做数据持久化的问题,看到了这个兄弟分享的文章

在使用这个兄弟分享的代码及插件的时候,发现一个问题,稍微做了一下修复

简单教程如下

第一步:安装插件及扩展

  1. # yarn方式安装
  2. yarn add pinia @pinia/nuxt pinia-plugin-persist
  3. # 错误1:如果你的 npm 版本大于 6 则需要 添加 --legacy-peer-deps
  4. yarn add pinia @pinia/nuxt pinia-plugin-persist --legacy-peer-deps
  5. # npm安装
  6. npm install --save pinia @pinia/nuxt pinia-plugin-persist
  7. # 错误1:如果你的 npm 版本大于 6 则需要 添加 --legacy-peer-deps
  8. npm install --save pinia @pinia/nuxt pinia-plugin-persist --legacy-peer-deps

第二步:配置(nuxt.config.ts)

  1. import { defineNuxtConfig } from 'nuxt';
  2. import { resolve } from 'path';
  3. // https://v3.nuxtjs.org/api/configuration/nuxt.config
  4. export default defineNuxtConfig({
  5. ...
  6. modules: ['@pinia/nuxt'],
  7. ...
  8. })

第三步:配置持久化插件(pinia-plugin-persist)

plugins 目录下创建 pinia-plugin-persist.client.ts 文件

  1. import { defineNuxtPlugin } from "#app";
  2. import piniaPersist from "pinia-plugin-persist";
  3. export default defineNuxtPlugin((nuxtApp) => {
  4. # 切记,这里是跟“梨花炖海棠”兄弟不一样,这个地方需要$pinia进行挂载
  5. nuxtApp.$pinia.use(piniaPersist)
  6. });

第四步:创建pinia持久化模块文件

在根目录创建stores目录,然后创建user.ts文件,代码如下:

  1. import { defineStore } from "pinia";
  2. export default defineStore("user", {
  3. state: () => {
  4. return {
  5. token: "",
  6. userinfo: {},
  7. };
  8. },
  9. actions: {
  10. // 用户登录
  11. login(data: any) {
  12. this.setToken(data.token);
  13. this.setUserInfo(data.userinfo);
  14. },
  15. // 单独更新或写入token
  16. setToken(data: any) {
  17. this.token = data;
  18. },
  19. // 单独更新用户信息或写入
  20. setUserInfo(data: any) {
  21. this.userinfo = data;
  22. },
  23. // 用户退出
  24. logout() {
  25. this.token = "";
  26. this.userinfo = {};
  27. },
  28. },
  29. persist: {
  30. enabled: true,
  31. strategies: [
  32. {
  33. key: "USER-INFO",
  34. storage: process.client ? localStorage : null,
  35. },
  36. ],
  37. },
  38. });

第五步:使用pinia

在你的page目录下创建login.vue,代码如下:

 

  1. <template>
  2. <div class="login-container">
  3. <div class="block-container">
  4. <div class="login-box">
  5. <div class="login-bg"></div>
  6. <div class="login-form">
  7. <div class="login-title">用户登录</div>
  8. <n-form ref="formRef" class="form-box" :model="formData">
  9. <n-form-item path="username" label="手机号码">
  10. <n-input
  11. v-model:value="formData.username"
  12. @keydown.enter.prevent
  13. placeholder="请输入手机号码"
  14. />
  15. </n-form-item>
  16. <n-form-item path="password" label="登录密码">
  17. <n-input
  18. v-model:value="formData.password"
  19. @keydown.enter.prevent
  20. placeholder="请输入登录密码"
  21. />
  22. </n-form-item>
  23. <div class="form-btn-group">
  24. <div class="form-start">
  25. <nuxt-link to="/register">我要注册</nuxt-link>
  26. </div>
  27. <div class="form-end">
  28. <nuxt-link to="/retrieve">忘记密码</nuxt-link>
  29. </div>
  30. </div>
  31. <div class="form-submit">
  32. <n-button type="primary" size="large" @click="onSubmit">
  33. 立即登录
  34. </n-button>
  35. </div>
  36. </n-form>
  37. </div>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <script setup>
  43. import { NForm, NFormItem, NInput, NButton } from "naive-ui";
  44. import userStore from "@/stores/user";
  45. const useUser = userStore();
  46. const formData = reactive({
  47. username: "",
  48. password: "",
  49. });
  50. // 用户登录
  51. function onSubmit() {
  52. // 使用pinia里面的方法
  53. useUser.setToken("123");
  54. // navigateTo("/");
  55. }
  56. </script>
  57. <style lang="scss" scoped>
  58. .login-container {
  59. .block-container {
  60. .login-box {
  61. display: flex;
  62. background: #fff;
  63. padding: 100px 0;
  64. margin-top: 15px;
  65. .login-bg {
  66. flex: 1;
  67. }
  68. .login-form {
  69. width: 500px;
  70. border-left: 1px solid #e5e5e5;
  71. .login-title {
  72. font-size: 1.5rem;
  73. font-weight: 700;
  74. text-align: center;
  75. }
  76. .form-box {
  77. padding: 0 50px;
  78. margin-top: 20px;
  79. .form-btn-group {
  80. display: flex;
  81. .form-start {
  82. flex: 1;
  83. justify-content: flex-start;
  84. }
  85. .form-end {
  86. flex: 1;
  87. display: flex;
  88. justify-content: flex-end;
  89. }
  90. }
  91. .form-submit {
  92. display: flex;
  93. justify-content: center;
  94. margin-top: 10px;
  95. }
  96. }
  97. }
  98. }
  99. }
  100. }
  101. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/971329
推荐阅读
相关标签
  

闽ICP备14008679号