我有一个函数,在其中我传递一个query
参数,该参数是一个字符串。如果查询不为空,则函数使用true布尔值调用toggleList
,否则使用false。
我还有一个接受数组的setMovies
函数。如果查询不为空,我想执行此函数。
query ? toggleList(true) : toggleList(false);
if (query) {
setMovies([...movies]);
}
但我不能这样做:
query ? (toggleList(true), setMovies([...movies])) : toggleList(false);
是不是不可能在三元语句的真值部分调用2个函数,因为这样我实现了太多的逻辑,我应该只使用一个普通的if/else语句,或者我缺少了一些东西,这使得成为可能
采取一种干净的方法。
toggleList(!!query); // if query is already boolean take it without !!
if (query) setMovies([...movies]);
如果调用的第一个函数有一个未定义的false返回值,您可以使用||运算符来触发它们两个
query ? toggleList(true) || setMovies([...movies]) : toggleList(false);
如果这是真的,你会相应地使用&;
query ? toggleList(true) && setMovies([...movies]) : toggleList(false);
示例:
function f1(){
console.log("f1");
}
function f2(){
console.log("f2");
}
function f3(){
console.log("f3");
}
true ? f1() || f2() : f3(); // logs both f1 and f2
false ? f1() || f2() : f3(); // logs f3
三元运算符用于简单的单行if/else情况。如果您想实现更复杂的逻辑,比如在您的案例中,请使用If/else标准。
您可以使用匿名函数调用
const func1 = a => console.log('1', a)
const func2 = b => console.log('2', b)
true
? (() => {
func1('a')
func2('b')
})()
: func2('c')
或
const func1 = a => console.log('1', a)
const func2 = b => console.log('2', b)
true ? (func1(1), func2(2)) : func2(2)