MST
星途 面试题库

面试题:Solid.js 中如何为列表渲染添加基本的过渡动画

在 Solid.js 项目里,假设已有一个简单的列表渲染,如展示一组待办事项列表。请阐述如何为这个列表添加基本的过渡动画,使得列表项在添加或删除时能有淡入淡出的效果,需说明涉及的关键 API 及实现步骤。
50.4万 热度难度
前端开发Solid.js

知识考点

AI 面试

面试题答案

一键面试
  1. 关键 API
    • createEffect:用于在 Solid.js 中创建副作用,在列表项添加或删除时触发动画相关操作。
    • createSignal:用于创建响应式状态,我们可以用它来跟踪列表的状态以及每个列表项的显示状态(用于控制淡入淡出)。
  2. 实现步骤
    • 初始化列表和状态
      • 使用 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>
  );
};
  • 添加和删除列表项
    • 添加列表项:定义一个函数,当添加新事项时,在列表中新增一个对象,并设置 isVisibletrue。例如:
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 项目中为列表添加基本的淡入淡出过渡动画,当添加或删除列表项时,会有相应的动画效果。