If-else在React Stateless功能组件中

时间:2015-12-02 14:34:02

标签: javascript reactjs react-router

我基本上是在重构我的React组件以支持新的无状态功能组件React functional component。但是,我对功能组件中的if-else语法感到困惑。

旧代码(工作正常):它的作用基本上是查找用户当前是否已登录。如果是,则重定向到主页,否则重定向到登录页面。 CurrentUser组件返回prop currentUser并检查当前状态

import React, {Component} from "react";
import currentUser from "shared/components/CurrentUser";
import Home from "../Home";
import Landing from "../Landing";

class DefaultRouteHandler extends Component {

    render() {
        if (!this.props.currentUser) {
            return (<Landing />);
        } else {
            return (<Home />);
        }
    }
}

export default currentUser(DefaultRouteHandler);

新代码:现在,如果currentUser的状态为false,我应该如何检查else条件。正如您现在所看到的,它将始终返回主页。

import React from "react";
import currentUser from "shared/components/CurrentUser";
import Home from "../Home";
import Landing from "../Landing";

const DefaultRouteHandler = ({currentUser}) => (
    <Home />
);

export default DefaultRouteHandler;

最后在我的route.jsx中,我正在调用前面提到的组件

<IndexRoute component={DefaultRouteHandler} />

如果您需要更多信息,请与我们联系。我也可以粘贴我的CurrentUser组件代码。但是,我认为这个问题没有任何意义。

4 个答案:

答案 0 :(得分:6)

const DefaultRouteHandler = ({currentUser}) => {
  if (currentUser) {
    return <Home />;
  }
  return <Landing />;
};

答案 1 :(得分:6)

我终于找到了问题所在。我必须在我的新代码中进行2次更改:

1)对if-else

使用三元运算符

2)忘记在导出默认值中传递currentUser包装器以访问实际的prop值

以下代码有效:

import React from "react";
import currentUser from "shared/components/CurrentUser";
import Home from "../Home";
import Landing from "../Landing";

const DefaultRouteHandler = ({currentUser}) => (
    !currentUser ? <Landing /> : <Home />
);

export default currentUser(DefaultRouteHandler);

感谢@Road提醒我,我没有从currentUser组件传递道具。

答案 2 :(得分:1)

这称为Conditional-Rendering

1)使用简单的if-else。

const DefaultRouteHandler = ({currentUser}) => {
    if (currentUser) {
      return <Home />;
    }
    return <Landing />;
};

2)使用JavaScript三元运算符

const DefaultRouteHandler = ({currentUser}) => (
    currentUser ? <Home /> : <Landing />
);

答案 3 :(得分:0)

在无状态组件中使用条件来显示多个导入的组件。 在您的水疗中心显示条件明智标题     在App.js文件中

&#13;
&#13;
set Alllinks=objIE.document.getallelementsbytagname("a")

For Each link In Alllinks

    'MsgBox link.innertext & " - " & link.href

    If InStr(link.innerText, "ABERCROMBIE JOE R") > 0 Then
        link.Click

    Exit For

    End If

Next link
&#13;
&#13;
&#13;