事件处理
这是原生 TSX 事件属性写法。若要看 Rue 的 v-on: / r-on: 指令糖、修饰符写法和两者对照,请看 /jsx/v-on-r-on。
import { type FC, ref } from '@rue-js/rue';
const Events: FC = () => {
const clickCount = ref(0);
const stopPreventCount = ref(0);
const enterCount = ref(0);
const selfCount = ref(0);
const handleClick = (event: MouseEvent) => {
clickCount.value += 1;
console.log('onClick ->', event.type, clickCount.value);
};
const handleStopPrevent = (event: MouseEvent) => {
event.stopPropagation();
event.preventDefault();
stopPreventCount.value += 1;
};
const handleEnter = (event: KeyboardEvent) => {
if (event.key !== 'Enter') return;
enterCount.value += 1;
};
const handleSelf = (event: MouseEvent) => {
if (event.target !== event.currentTarget) return;
selfCount.value += 1;
};
return (
<div className="grid gap-4">
<button className="btn btn-primary" onClick={handleClick}>
onClick
</button>
<a className="link link-primary" href="#noop" onClick={handleStopPrevent}>
onClick + stopPropagation + preventDefault
</a>
<input className="input input-bordered" placeholder="按 Enter" onKeyUp={handleEnter} />
<div className="rounded-box border border-base-300 p-4" onClick={handleSelf}>
<span>手写 self 判定</span>
<button className="btn btn-ghost btn-sm">子元素按钮</button>
</div>
</div>
);
};
export default Events;