1 回答

TA贡献1966条经验 获得超4个赞
iconToggle您在内部实例化useEffect(),但您忽略了useEffect()采用第二个参数deps list的事实。没有它,该逻辑会在每次重新渲染时重新运行,这意味着您每次都iconToggle.on被设置回true,因此它保持在“开启”状态。
作为旁注,选择 HTML 元素的更 React-ish 方式是 by useRef(),而不是document.querySelector()可能会找到其他不需要的元素
import React, { useEffect, useRef } from 'react';
import { MDCIconButtonToggle } from '@material/icon-button';
const ButtonLike = () => {
const buttonRef = useRef(null);
useEffect(() => {
const iconToggle = new MDCIconButtonToggle(buttonRef.current);
iconToggle.on = true;
}, []); // <-- You need to pass in an empty array
// to signal that you want this logic to run only once.
return (
<button
ref={buttonRef}
id="add-to-favorites"
className="mdc-icon-button mdc-icon-button--on"
aria-label="Add to favorites"
aria-pressed="false"
>
);
}
添加回答
举报