微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

'||' 的意外混合和 '&&' 非混合运算符

如何解决'||' 的意外混合和 '&&' 非混合运算符

我有以下钩子,我们用它来绑定到频道。

import { useEffect,useState } from "react";
import { Channel,PresenceChannel } from "pusher-js";
import PrivateChannel from 'pusher-js/types/src/core/channels/private_channel';
import { usePusher } from "./usePusher";

export type ChannelType = PrivateChannel | PresenceChannel

function _useChannel<T extends ChannelType>(channelName: string) {
    const pusher = usePusher()
    const [channel,setChannel] = useState<T>();

    useEffect(() => {
        const pusherChannel = pusher.subscribe(channelName) as T;
        setChannel(pusherChannel);

        return () => pusher?.unsubscribe(channelName);
    },[channelName,pusher]);

    return channel;
}

当我打开控制台时,我看到以下消息:Unexpected mix of '||' and '&&' no-mixed-operators

为什么会发生这种情况?

解决方法

正如@Drew Reese 所说,您在某处有一个复杂的逻辑表达式混合 &&||,并且您已配置 ESLint 以在发生这种情况时向您发出警告。您必须找到发生这种情况的地方,并添加必要的括号以阐明您的意图。

来自ESLint docs

var foo = a && b || c || d;    /*BAD: Unexpected mix of '&&' and '||'.*/
var foo = a && b ? c : d;      /*BAD: Unexpected mix of '&&' and '?:'.*/
var foo = (a && b) ? c : d;    /*GOOD*/
var foo = (a && b) || c || d;  /*GOOD*/
var foo = a && (b || c || d);  /*GOOD*/

如果您不确定布尔运算符的正确优先级应该是什么,请认为 && 可以被认为是 multiplication 的等价物,而 ||addition,因此 && 优先于 ||

例如:

a && b || c || d 
<=> a*b + c + d 
<=> (a && b) || c || d

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?