面试题答案
一键面试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;
在上述代码中:
- 我们使用
createSignal
创建了两个信号isVisible
和opacity
,分别用于控制元素是否可见以及透明度。 createEffect
内部根据isVisible
信号的值来决定执行何种动画逻辑。当isVisible
为true
时,设置透明度为1,并在2秒后开始渐隐动画;当isVisible
为false
时,直接将透明度设置为0。- 页面上有一个按钮,点击按钮可以切换
isVisible
的值,进而触发相应的渐隐渐现动画效果。