利用 vuex写一个todoList

1 store 仓库下有index,js文件

 state: { // 存放数据
    todoList: JSON.parse(sessionStorage.getItem('todoList')) || []
  },
  mutations: { // 同步方法
    btn(state, val) {
      state.todoList.push({
        id:Date.now(),
        name: val
      })
    sessionStorage.setItem('todoList', JSON.stringify(state.todoList))
    },
    remove(state, index) {
      console.log(index) // 接收过来的id参数
      // state.todoList.splice(index, 1)
      // sessionStorage.setItem('todoList', JSON.stringify(state.todoList))
      state.todoList.some((item , i) => { // some 方法一个为true即为true
        console.log(item.id)
        if (item.id == index) {  //判断有一个符合some 方法的id
          console.log('../', item.id)
          state.todoList.splice(i, 1)
          return sessionStorage.setItem('todoList',JSON.stringify(state.todoList))
        }
      })
    }
  },

vue文件里的内容
在元素上写一个mode模板

 <div>todoList</div>
    <input type="text" v-model="str">
   	<button @click='add' >   添加 </button>
      <ul>
      <!-- 根据下标删除 -->
      <!-- <li v-for="(item, index) in todoList" :key="item.id">{{item.name}}
        <button @click='remove(index)'>删除</button>
      </li> -->
      <!-- 根据id删除 -->
      <li v-for="item in todoList" :key="item.id">{{item.name}}
        <button @click='remove(item.id)'>删除</button>
      </li>
    </ul>

在这里插入图片描述
script里的内容

<script>
export default {
  data() {
    return {
      str: '',
      todoList: this.$store.state.todoList
    }
  },
  computed: {
  },
  methods: {
    add() {
      if(this.str === '') return;
      this.$store.commit('btn', this.str);
      this.str = ''
    },
    // 根据下标删除
    // remove(index) {
    //   console.log(index, 'index')
    //   this.$store.commit('remove', index)
    // }
    // 根据id删除
    remove(id) {
      console.log(id, 'id')
      this.$store.commit('remove', id)
    }
  },
}
</script>

在这里插入图片描述

好的,我来给你一个todolist。 首先,我们需要创建一个空的Vue 3项目,可以使用Vue CLI来创建。 在终端中输入以下命令: ``` vue create todolist ``` 接着,我们需要安装一些必要的依赖,包括`vuex`和`axios`。 在终端中输入以下命令: ``` cd todolist npm install vuex axios ``` 接下来,我们需要在src目录下创建一个名为`components`的文件夹,并在其中创建一个名为`TodoList.vue`的文件。 在`TodoList.vue`中,我们可以下以下代码: ```html <template> <div> <h1>Todolist</h1> <input type="text" v-model="newTodo" @keydown.enter="addTodo" placeholder="Add new todo"> <ul> <li v-for="(todo, index) in todos" :key="todo.id"> <input type="checkbox" v-model="todo.completed" /> <span :class="{ completed: todo.completed }">{{ todo.title }}</span> <button @click="deleteTodo(index)">Delete</button> </li> </ul> </div> </template> <script> import { reactive } from 'vue'; import axios from 'axios'; export default { name: 'TodoList', setup() { const state = reactive({ todos: [], newTodo: '', }); const fetchData = async () => { const response = await axios.get('https://jsonplaceholder.typicode.com/todos'); state.todos = response.data; }; const addTodo = () => { if (state.newTodo.length > 0) { const newTodo = { id: state.todos.length + 1, title: state.newTodo, completed: false, }; state.todos.push(newTodo); state.newTodo = ''; } }; const deleteTodo = (index) => { state.todos.splice(index, 1); }; return { state, fetchData, addTodo, deleteTodo, }; }, mounted() { this.fetchData(); }, }; </script> <style> .completed { text-decoration: line-through; } </style> ``` 在这个代码中,我们使用了Vue 3的Composition API来实现了`reactive`函数,它允许我们定义一个响应式的状态对象。我们还使用了`axios`来从外部API获取到了一些假数据,并将其渲染到了页面中。 现在我们只需要在`App.vue`中引入`TodoList.vue`组件即可: ```html <template> <div id="app"> <TodoList /> </div> </template> <script> import TodoList from './components/TodoList.vue'; export default { name: 'App', components: { TodoList, }, }; </script> ``` 现在我们已经完成了一个简单的todolist应用程序。当你运行`npm run serve`时,你应该可以看到一个具有添加和删除功能的todolist
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值