我有以下包含这两个组件的待办事项应用程序:App
和Todo
应用程序.vue
<template>
<div class="todo-list">
<div :key="index" v-for="(todo, index) in state.todos">
<Todo :todo="todo" :state="state" />
</div>
</div>
</template>
<script>
import { reactive } from '@vue/composition-api';
import Todo from './components/Todo.vue';
export default {
components: {
Todo
},
setup() {
let state = reactive({
todos: [
{ text: 'Learn about Vue', isCompleted: false },
{ text: 'Meet friend for lunch', isCompleted: false },
{ text: 'Build really cool todo app', isCompleted: false }
]
});
return { state };
}
};
</script>
待办事项
<template>
<div class="todo">{{ todo.text }}<button @click="deleteTodo">x</button></div>
</template>
<script>
export default {
props: ['todo', 'state'],
setup({ todo, state }) {
const deleteTodo = () => {
state.todos = state.todos.filter(t => t != todo);
};
return {
deleteTodo
};
}
};
</script>
该deleteTodo
函数在Todo.vue组件中运行良好,但是,我想知道是否可以不传递state
对象而是使用ref()
类似的对象并传递 todos
...
所以在App.vue
//...
let todos = ref({[
{ text: 'Learn about Vue', isCompleted: false },
{ text: 'Meet friend for lunch', isCompleted: false },
{ text: 'Build really cool todo app', isCompleted: false }
]);
//...
代替:
//...
let state = reactive({
todos: [
{ text: 'Learn about Vue', isCompleted: false },
{ text: 'Meet friend for lunch', isCompleted: false },
{ text: 'Build really cool todo app', isCompleted: false }
]
});
//...
但是,当我尝试这样做时......孩子无法过滤已删除的待办事项并重新分配给todos
变量。这行不通。
有什么想法可以让它工作ref
吗?