面试题答案
一键面试- 关键 API:
createEffect
:用于在 Solid.js 中创建副作用,在列表项添加或删除时触发动画相关操作。createSignal
:用于创建响应式状态,我们可以用它来跟踪列表的状态以及每个列表项的显示状态(用于控制淡入淡出)。
- 实现步骤:
- 初始化列表和状态:
- 使用
createSignal
创建一个信号来存储待办事项列表。例如:
- 使用
- 初始化列表和状态:
import { createSignal } from'solid-js';
const [todoList, setTodoList] = createSignal([
{ id: 1, text: '事项1', isVisible: true },
{ id: 2, text: '事项2', isVisible: true }
]);
这里每个列表项对象新增了 isVisible
属性,用于控制淡入淡出。
- 渲染列表并添加动画:
- 在渲染列表时,为每个列表项添加基于
isVisible
的过渡动画。可以通过 CSS 的opacity
属性结合transition
来实现淡入淡出效果。例如:
- 在渲染列表时,为每个列表项添加基于
import { For } from'solid-js';
const TodoList = () => {
const [list] = todoList();
return (
<ul>
<For each={list}>{(item) => (
<li style={{ opacity: item.isVisible? 1 : 0, transition: 'opacity 0.3s ease' }}>
{item.text}
</li>
)}</For>
</ul>
);
};
- 添加和删除列表项:
- 添加列表项:定义一个函数,当添加新事项时,在列表中新增一个对象,并设置
isVisible
为true
。例如:
- 添加列表项:定义一个函数,当添加新事项时,在列表中新增一个对象,并设置
const addTodo = (text) => {
const newItem = { id: Date.now(), text, isVisible: true };
setTodoList([...todoList(), newItem]);
};
- **删除列表项**:定义一个函数,当删除事项时,找到要删除的项并将其 `isVisible` 设置为 `false`,并在一定时间后从列表中移除。可以使用 `createEffect` 来实现这个逻辑。例如:
import { createEffect } from'solid-js';
const removeTodo = (id) => {
setTodoList(todoList().map(item => {
if (item.id === id) {
item.isVisible = false;
}
return item;
}));
createEffect(() => {
const newList = todoList().filter(item => item.isVisible);
setTodoList(newList);
return () => {
// 清理副作用
};
});
};
这样就可以在 Solid.js 项目中为列表添加基本的淡入淡出过渡动画,当添加或删除列表项时,会有相应的动画效果。