MST

星途 面试题库

面试题:Solid.js中createEffect在简单动画实现里的作用及示例

在Solid.js中,createEffect在动画实现过程中扮演着怎样的角色?请举例说明如何利用createEffect创建一个简单的动画,比如一个元素的渐隐渐现效果。
29.0万 热度难度
前端开发Solid.js

知识考点

AI 面试

面试题答案

一键面试

createEffect在Solid.js动画实现中的角色

createEffect在Solid.js动画实现中扮演着副作用处理和响应式执行的角色。它会在依赖的数据发生变化时自动重新执行,这使得我们可以基于响应式数据的变化来触发动画效果,比如元素的显示隐藏、属性变化等,实现动画与数据状态的紧密关联。

利用createEffect创建渐隐渐现动画示例

import { createSignal, createEffect } from 'solid-js';

const App = () => {
  const [isVisible, setIsVisible] = createSignal(true);
  const [opacity, setOpacity] = createSignal(1);

  createEffect(() => {
    if (isVisible()) {
      setOpacity(1);
      const fadeOut = () => {
        const interval = setInterval(() => {
          const currentOpacity = opacity();
          if (currentOpacity > 0) {
            setOpacity(currentOpacity - 0.1);
          } else {
            clearInterval(interval);
          }
        }, 100);
      };
      setTimeout(fadeOut, 2000);
    } else {
      setOpacity(0);
    }
  });

  return (
    <div>
      <button onClick={() => setIsVisible(!isVisible())}>
        {isVisible() ? 'Hide' : 'Show'}
      </button>
      <div style={{ opacity: opacity() }}>
        This is a div that fades in and out.
      </div>
    </div>
  );
};

export default App;

在上述代码中:

  1. 我们使用createSignal创建了两个信号isVisibleopacity,分别用于控制元素是否可见以及透明度。
  2. createEffect内部根据isVisible信号的值来决定执行何种动画逻辑。当isVisibletrue时,设置透明度为1,并在2秒后开始渐隐动画;当isVisiblefalse时,直接将透明度设置为0。
  3. 页面上有一个按钮,点击按钮可以切换isVisible的值,进而触发相应的渐隐渐现动画效果。