具有反应路径的三元运算符中的多个表达式

时间:2018-03-24 22:12:27

标签: javascript reactjs session-storage

嘿我想在我的路线上设置会话项目,以便我可以在我的身份验证回调中使用它。所以这里我有一个三元运算符,我检查它是否经过验证然后我做了一些事情,如果不是我做两件事。

它不起作用。我的问题是如何在三元运算符上做多个事情,无论它是真还是假。

<Route path="/dashboard" render={(props) => (
          auth.isAuthenticated() ? (
              <whateverComp auth={auth} {...props} />
          ) : (
              <Redirect to="/log-in"/>
          ) ? // setter for page_name
              sessionStorage.setItem('page_name', 'dashboard'): null
      )}/>

我的解决方案:

<Route path="/dashboard" render={(props) => {
        if (!auth.isAuthenticated()) {
          sessionStorage.setItem('page_name', 'dashboard');
          return <Redirect to="/log-in"/>;
        }
        else {
          return <Dashboard auth={auth} {...props} />;
        }
      }}/>

2 个答案:

答案 0 :(得分:1)

具体来说,问题是三元运算符会解析为然后通过三元的 left 上的任何内容进行评估。

例如

const x = condition
          ? result1
          : result2;

但是如果三元组的左边没有任何东西,除了副作用之外什么都不做,而if语句可以更清楚地做到这一点。 (如果您的代码比合理地适合单行更复杂,您也应该使用if / else

也许你想要

if (!auth.isAuthenticated()) return (
  <whateverComp auth={auth} {...props} />
);
sessionStorage.setItem('page_name', 'dashboard');
return (
  <Redirect to="/log-in"/>
);

答案 1 :(得分:0)

choreDoor === 0 ? 
   (openDoor1 = botDoorPath,
    openDoor2 = beachDoorPath,
    openDoor3 = spaceDoorPath)
: choreDoor === 1 ? 
   (openDoor2 = botDoorPath,
    openDoor1 = beachDoorPath, 
    openDoor3 = spaceDoorPath) 
: choreDoor === 2 ?
   (openDoor3 = botDoorPath,
    openDoor1 = beachDoorPath, 
    openDoor2 = spaceDoorPath)
: false;

解决了我的问题