我一直在学习 vuex4,在那里我在 main.js 中编写了所有状态、操作、getter ......
现在我已经了解了模块,并尝试将我的代码重构为单独文件中的模块。一切正常,除了一个 v-for 循环,其中数字应该出现但不出现。当“历史”下的应用程序上的数字发生变化时,该数字应出现。
我正在使用 counter.js 中的突变“addToCounter”和“minToCounter”更新历史数组
History.vue(这是 v-for 循环不起作用的地方)
<div class="container">
<h4>History</h4>
<div class="flex">
<p
v-for="(number,index) in history"
:key="index"
:class="activeIndexes(parseInt(value)).includes(index) && 'bold'"
>
{{number}}
</p>
</div>
<input
type="text"
placeholder="search by index"
v-model="value"
>
</div>
</template>
<script>
import {mapState, mapGetters} from "vuex";
export default {
data(){
return{
value: 0,
}
},
computed: {
...mapState(['history']),
...mapGetters(['activeIndexes']),
}
}
</script>
<style>...</style>
counter.js(模块保存在 modules/counter.js 中)
import axios from "axios";
const state = {
counter: 0,
history: [0],
};
const mutations = {
addToCounter(state, payload){
state.counter = state.counter + payload;
state.history.push(state.counter)
},
minToCounter(state, payload){
state.counter = state.counter - payload;
state.history.push(state.counter)
}
};
const actions = {
//async je takrt k zahtevamo nek http request npr od api-ja spodnji primer:
async addRandomNumber(context) {
let data = await axios.get('https://www.random.org/integers/?num=1&min=-1000&max=1000&col=1&base=10&format=plain&rnd=new');
context.commit("addToCounter",data.data);
}
};
const getters = {
activeIndexes: (state) => (payload) => {
let indexes = [];
state.history.forEach((number, index) => {
if(number === payload) {
indexes.push(index)
}
});
return indexes
}
};
export default {
state,mutations,actions,getters
}
main.js
import { createApp } from 'vue'
import { createStore } from 'vuex';
import counter from "./modules/counter";
import App from './App.vue'
const store = createStore({
modules: {
counter: counter,
}
})
createApp(App).use(store).mount('#app')