代码示例
import { createSignal } from 'solid-js';
const MyComponent = () => {
const [isActive, setIsActive] = createSignal(false);
const handleClick = () => {
setIsActive(!isActive());
};
return (
<div className={isActive()? 'active-class' : 'inactive-class'}>
<button onClick={handleClick}>
{isActive()? 'Deactivate' : 'Activate'}
</button>
</div>
);
};
export default MyComponent;
原理解释
- 状态管理:通过
createSignal
函数创建了一个信号 isActive
及其更新函数 setIsActive
。信号是 Solid.js 中用于管理状态的核心机制,它可以追踪状态的变化并自动触发依赖于该状态的视图更新。
- 动态类名:在
div
标签的 className
属性中,使用了三元表达式 isActive()? 'active-class' : 'inactive-class'
。这里 isActive()
用于获取当前 isActive
的值,根据这个值来决定添加 active-class
还是 inactive-class
类名。当 isActive
的值发生变化时,className
也会相应改变,从而实现样式的动态切换。
- 事件处理:
handleClick
函数通过调用 setIsActive
来反转 isActive
的值。当按钮被点击时,handleClick
函数被触发,isActive
的值发生变化,进而导致视图中 div
的 className
更新,实现样式的动态切换。