Reactjs 意外的'||';和'&&';无混合运算符

Reactjs 意外的'||';和'&&';无混合运算符,reactjs,pusher-js,Reactjs,Pusher Js,我有下面的钩子,我们使用它绑定到通道 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 "

我有下面的钩子,我们使用它绑定到通道

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;
}
从“react”导入{useffect,useState};
从“pusher js”导入{Channel,PresenceChannel};
从“pusher js/types/src/core/channels/private_channel”导入PrivateChannel;
从“/usePusher”导入{usePusher};
导出类型ChannelType=PrivateChannel | presence频道
函数_useChannel(通道名称:字符串){
常量pusher=usePusher()
const[channel,setChannel]=useState();
useffect(()=>{
const pusherChannel=pusher.subscribe(channelName)作为T;
设置通道(推送通道);
return()=>pusher?.unsubscribe(channelName);
},[channelName,pusher]);
返回通道;
}
当我打开控制台时,我看到以下消息:
意外地混合了“| |”和“&&”无混合运算符


为什么会发生这种情况?

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

如果您不确定布尔运算符的正确优先级应该是什么,请认为
&
可以被视为等同于
乘法
|
的加法,因此
&
优先于
|

例如:

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

好吧,在某些地方,您可以使用类似于“cond1 | | cond2&&cond3”的代码来代替它(cond1 | | cond2)&&cond3”或“cond1 | |(cond2&&cond3)”。代码中的lint警告/错误指向哪里?没有条件。该警告出现在IDE的控制台和浏览器中。让我快速检查一下。我刚刚删除了IDE的缓存,不确定发生了什么。现在一切都好了。投票结束,那时就无法生产了。干杯
a && b || c || d 
<=> a*b + c + d 
<=> (a && b) || c || d