删除无用信息
This commit is contained in:
parent
a9a4f35b02
commit
119dbc0f28
@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
icon: simple-icons:spring
|
|
||||||
title: SpringSecurity
|
|
||||||
date: 2025-05-07
|
|
||||||
category:
|
|
||||||
- JAVA
|
|
||||||
tag:
|
|
||||||
- Spring
|
|
||||||
---
|
|
||||||
test
|
|
||||||
<!-- more -->
|
|
||||||
|
|
||||||
|
|
||||||
## 1. BeanDefinitionRegistryPostProcessor
|
|
@ -1,311 +0,0 @@
|
|||||||
---
|
|
||||||
icon: simple-icons:spring
|
|
||||||
title: SpringSecurity
|
|
||||||
date: 2025-05-07
|
|
||||||
category:
|
|
||||||
- JAVA
|
|
||||||
tag:
|
|
||||||
- Spring
|
|
||||||
- SpringSecurity
|
|
||||||
star: 10
|
|
||||||
description: 若依的SpringSecurity案例
|
|
||||||
# 此页面会在文章列表置顶
|
|
||||||
sticky: true
|
|
||||||
---
|
|
||||||
若依的SpringSecurity案例
|
|
||||||
<!-- more -->
|
|
||||||
|
|
||||||
|
|
||||||
# Vuex
|
|
||||||
|
|
||||||
## 1. 安装
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install vuex --save
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2. 开始
|
|
||||||
|
|
||||||
1. Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器
|
|
||||||
1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新
|
|
||||||
2. 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地**提交mutation**
|
|
||||||
|
|
||||||
## 3. state
|
|
||||||
|
|
||||||
### 1. 单一状态树
|
|
||||||
|
|
||||||
1. Vuex使用**单一状态树**—一个对象就包含了全部的应用层级状态(意味着每个应用将仅仅包含一个 store 实例)
|
|
||||||
|
|
||||||
### 2. 在 Vue 组件中获得 Vuex 状态
|
|
||||||
|
|
||||||
>Vuex 通过 `store` 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 `Vue.use(Vuex)`):
|
|
||||||
|
|
||||||
```vue
|
|
||||||
const app = new Vue({
|
|
||||||
el: '#app',
|
|
||||||
// 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
|
|
||||||
store,
|
|
||||||
components: { Counter },
|
|
||||||
template: `
|
|
||||||
<div class="app">
|
|
||||||
<counter></counter>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
>this.$store可以访问 store 实例
|
|
||||||
|
|
||||||
```vue
|
|
||||||
const Counter = {
|
|
||||||
template: `<div>{{ count }}</div>`,
|
|
||||||
computed: {
|
|
||||||
count () {
|
|
||||||
return this.$store.state.count
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. `mapState` 辅助函数
|
|
||||||
|
|
||||||
>当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 `mapState` 辅助函数帮助我们生成计算属性,让你少按几次键:
|
|
||||||
|
|
||||||
```vue
|
|
||||||
// 在单独构建的版本中辅助函数为 Vuex.mapState
|
|
||||||
import { mapState } from 'vuex'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// ...
|
|
||||||
computed: mapState({
|
|
||||||
// 箭头函数可使代码更简练
|
|
||||||
count: state => state.count,
|
|
||||||
|
|
||||||
// 传字符串参数 'count' 等同于 `state => state.count`
|
|
||||||
countAlias: 'count',
|
|
||||||
|
|
||||||
// 为了能够使用 `this` 获取局部状态,必须使用常规函数
|
|
||||||
countPlusLocalState (state) {
|
|
||||||
return state.count + this.localCount
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
>当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 `mapState` 传一个字符串数组
|
|
||||||
|
|
||||||
```vue
|
|
||||||
computed: mapState([
|
|
||||||
// 映射 this.count 为 store.state.count
|
|
||||||
'count'
|
|
||||||
])
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. 对象展开运算符
|
|
||||||
|
|
||||||
>使用对象展开运算符与局部计算属性混合使用,因为mapState返回的是一个对象,所以吧mapState和computed合并即可
|
|
||||||
|
|
||||||
```tex
|
|
||||||
computed: {
|
|
||||||
localComputed () { /* ... */ },
|
|
||||||
// 使用对象展开运算符将此对象混入到外部对象中
|
|
||||||
...mapState({
|
|
||||||
// ...
|
|
||||||
})
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5. 组件仍然保有局部状态
|
|
||||||
|
|
||||||
>使用 Vuex 并不意味着你需要将**所有的**状态放入 Vuex。虽然将所有的状态放到 Vuex 会使状态变化更显式和易调试,但也会使代码变得冗长和不直观。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。你应该根据你的应用开发需要进行权衡和确定。
|
|
||||||
|
|
||||||
## 4. Getter
|
|
||||||
|
|
||||||
>有时候我们需要使用state计算一些值,而且需要在其它组件使用,要么复制这个函数,或者抽取到一个共享函数然后在多处导入它
|
|
||||||
>
|
|
||||||
>例如对列表进行过滤并计数:
|
|
||||||
|
|
||||||
```vue
|
|
||||||
computed: {
|
|
||||||
doneTodosCount () {
|
|
||||||
return this.$store.state.todos.filter(todo => todo.done).length
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
>解决方案
|
|
||||||
>
|
|
||||||
>Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
|
|
||||||
>
|
|
||||||
>Getter 接受 state 作为其第一个参数:
|
|
||||||
|
|
||||||
```vue
|
|
||||||
const store = new Vuex.Store({
|
|
||||||
state: {
|
|
||||||
todos: [
|
|
||||||
{ id: 1, text: '...', done: true },
|
|
||||||
{ id: 2, text: '...', done: false }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
getters: {
|
|
||||||
doneTodos: state => {
|
|
||||||
return state.todos.filter(todo => todo.done)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### 1. 通过属性访问
|
|
||||||
|
|
||||||
```tex
|
|
||||||
1. 声明
|
|
||||||
const store = new Vuex.Store({
|
|
||||||
state: {
|
|
||||||
todos: [
|
|
||||||
{ id: 1, text: '...', done: true },
|
|
||||||
{ id: 2, text: '...', done: false }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
//相当于计算属性只是对于state的计算
|
|
||||||
getters: {
|
|
||||||
doneTodos: state => {
|
|
||||||
return state.todos.filter(todo => todo.done);
|
|
||||||
},
|
|
||||||
doneTodosCount: (state, getters) => {
|
|
||||||
return getters.doneTodos.length
|
|
||||||
},
|
|
||||||
getTodoById: (state) => (id) => {
|
|
||||||
return state.todos.find(todo => todo.id === id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
2. 调用
|
|
||||||
store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]
|
|
||||||
store.getters.doneTodosCount // -> 1
|
|
||||||
组件中
|
|
||||||
this.$store.getters.doneTodosCount
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 通过方法访问
|
|
||||||
|
|
||||||
```tex
|
|
||||||
1.声明一个方法
|
|
||||||
getters: {
|
|
||||||
// ...
|
|
||||||
getTodoById: (state) => (id) => {
|
|
||||||
return state.todos.find(todo => todo.id === id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
2. 使用该方法
|
|
||||||
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. `mapGetters` 辅助函数
|
|
||||||
|
|
||||||
```vue
|
|
||||||
import { mapGetters } from 'vuex'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// ...
|
|
||||||
computed: {
|
|
||||||
// 使用对象展开运算符将 getter 混入 computed 对象中
|
|
||||||
...mapGetters([
|
|
||||||
'doneTodosCount',
|
|
||||||
'anotherGetter',
|
|
||||||
// ...
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
...mapGetters({
|
|
||||||
// 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
|
|
||||||
doneCount: 'doneTodosCount'
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
## 5. Mutation
|
|
||||||
|
|
||||||
>更改 Vuex 的 store 中的状态的唯一方法是提交 mutation
|
|
||||||
>
|
|
||||||
>Mutation 必须是同步函数
|
|
||||||
|
|
||||||
```vue
|
|
||||||
const store = new Vuex.Store({
|
|
||||||
state: {
|
|
||||||
count: 1
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
increment (state) {
|
|
||||||
// 变更状态
|
|
||||||
state.count++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
store.commit('increment')
|
|
||||||
```
|
|
||||||
|
|
||||||
### 1. 传入参数方式1
|
|
||||||
|
|
||||||
>你可以向 `store.commit` 传入额外的参数,即 mutation 的 **载荷(payload)**:
|
|
||||||
>
|
|
||||||
>在大多数情况下,载荷应该是一个对象,这样可以包含多个字段并且记录的 mutation 会更易读:
|
|
||||||
|
|
||||||
```vue
|
|
||||||
// ...
|
|
||||||
mutations: {
|
|
||||||
increment (state, payload) {
|
|
||||||
state.count += payload.amount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
store.commit('increment', {
|
|
||||||
amount: 10
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 对象风格的提交方式
|
|
||||||
|
|
||||||
>当使用对象风格的提交方式,整个对象都作为载荷传给 mutation 函数,因此 handler 保持不变:
|
|
||||||
|
|
||||||
```tex
|
|
||||||
1. 函数不变
|
|
||||||
mutations: {
|
|
||||||
increment (state, payload) {
|
|
||||||
state.count += payload.amount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
2. 对象提交方式
|
|
||||||
store.commit({
|
|
||||||
type: 'increment',
|
|
||||||
amount: 10
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. `mapMutations` 辅助函数
|
|
||||||
|
|
||||||
```tex
|
|
||||||
import { mapMutations } from 'vuex'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// ...
|
|
||||||
methods: {
|
|
||||||
...mapMutations([
|
|
||||||
'increment', // 将 `this.increment()` 映射为 `this.$store.commit('increment')`
|
|
||||||
|
|
||||||
// `mapMutations` 也支持载荷:
|
|
||||||
'incrementBy' // 将 `this.incrementBy(amount)` 映射为 `this.$store.commit('incrementBy', amount)`
|
|
||||||
]),
|
|
||||||
...mapMutations({
|
|
||||||
add: 'increment' // 将 `this.add()` 映射为 `this.$store.commit('increment')`
|
|
||||||
})
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 6.Action
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user