制作一个与 jquery 反应的切换按钮不起作用

Posted

技术标签:

【中文标题】制作一个与 jquery 反应的切换按钮不起作用【英文标题】:Making a toggle button in react with jquery not working 【发布时间】:2021-11-20 01:21:01 【问题描述】:

我的 React Web 应用程序遇到了问题。想要制作一个投票系统,如果您点击“喜欢”按钮,它会改变颜色,并且只能被点赞一次。如果您再次点击它,它会回到“中性”并且类似计数会减少。不喜欢按钮也是如此。例如,如果你有喜欢的东西,但你击中了不喜欢的东西,那么喜欢的东西就会变回中性,不喜欢的东西就会改变颜色。基本上就像YouTube视频之类的系统。不过,我用我的方法遇到了这个问题:

const[score,setScore] = useState(0);
    const[dislike,setDislike] = useState(0);
    const[buttonState,setButtonState] = useState(true);
    var boolD = true;
    var boolL = true;
    const incrmentLike = () => 
        setScore(idea.score +=1)
        console.log(idea.score)

    

    var disliked = false;
const incrmentDislike = () => 
        setDislike(idea.dislike +=1)

var flag = 0;
    function toggleDislike()
    if(flag===0)
        console.log(flag)
        flag=1;
        incrmentDislike()
        console.log(flag)
        disliked = true;
    
    else if(flag===1)
        setDislike(idea.dislike -=1)
        disliked = false;
        flag=0;
        console.log(flag)
    
    
    


return(
    <div className="idea-details">
        isPending && <div>Leading...</div>
        idea && (
            <article>
                <h2>idea.ideaTitle</h2>
                <p>Written by idea.author</p>
                <div>idea.body </div>
                <div>idea.score Likes idea.dislike Dislikes</div>
            </article>
        )
        <a type="button" className=classNameLU id="button2" title="button" onClick=() => incrmentLike()>Like!</a>
        <div
            className="btn btn-warning btn-lg"
            style= backgroundColor: dislike ? "#35b5f1" : "#8b8b8b" 
            id="toggleDiv"
            onClick=toggleDislike
            >
            Dislike
        </div>
    </div>
);

基本上,标志总是被重置为 0,并且该方法永远不会到达标志 == 1 的 if 语句。我认为这是因为 useState() 以某种方式重置了变量。我想知道我是否可以得到帮助来解决这个问题?我现在只在处理不喜欢的按钮。 setScore 是类似的按钮。您可以忽略第一个按钮。

【问题讨论】:

【参考方案1】:

React 和 jquery 通常不会混合使用。问题是 jquery 在 React 组件生命周期之外直接操作 DOM,因此不会触发 React 来重新渲染 UI。此外,是的,flag 在每个渲染周期都被重置为0,它没有保持在任何状态或 React ref,因此它的值不会在渲染之间保存。坚持使用 React 状态将值从渲染保存到渲染。

将背景颜色移动到 style 属性并使用不喜欢状态有条件地设置一种背景颜色或另一种。

<div
  className="btn btn-warning btn-lg"
  style= backgroundColor: disliked ? "#35b5f1" : "#8b8b8b" 
  id="toggleDiv"
  onClick=toggleDislike
>
  Dislike
</div>

【讨论】:

是的,我想,jquery根本不适合,一开始很难让它工作谢谢你的建议,这种改变颜色的方式要好得多,我会更新我的代码.你对绕过标志总是重置有什么建议吗? @AndrewViera Re: flag (and others) 总是重置,不要在函数体中声明它/它们,让它/它们成为组件状态的一部分,或使用 React ref 来存储值,以便它/它们通过重新渲染持续存在。 哦,是的,这很有道理,哈哈,我只是将变量移到函数上方,现在它可以正常工作了。谢谢! 所以作为一般规则,我应该永远不要将 jquery 与 react 一起使用吗? @AndrewViera 是的,在大多数情况下。原因是它们有相当正交的方法来处理 UI 更新,并且 jquery 用于抓取 DOM 元素的所有有用方面都可以在 React 中使用 refs 来处理。

以上是关于制作一个与 jquery 反应的切换按钮不起作用的主要内容,如果未能解决你的问题,请参考以下文章

添加jQuery脚本后提交按钮不起作用

滑动 jQuery 面板在 iPad 上不起作用

为啥我的 jQuery on click 事件不起作用?

jquery动画滚动不起作用

jQuery img src 替换不起作用

移动设备的基本 jquery 切换菜单不起作用