React 无状态功能组件中的 If-else
If-else in React Stateless functional components
我基本上是在重构我的 React 组件以支持新的无状态功能组件 React functional component。但是,我对功能组件中的 if-else
语法感到困惑。
旧代码(工作正常):它所做的基本上是查找用户当前是否已登录。如果是,则重定向到主页,否则重定向到着陆页。 CurrentUser 组件 return 是一个道具 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
条件。正如您现在看到的那样,它将始终 return 主页。
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
组件代码。但是,我认为它对这个问题没有任何作用。
const DefaultRouteHandler = ({currentUser}) => {
if (currentUser) {
return <Home />;
}
return <Landing />;
};
终于找到问题了。我必须对我的新代码进行 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
组件的道具。
在无状态组件中使用条件显示多个导入组件。
在您的 SPA 中明智地显示状况 header
在 App.js 文件中
var path= window.location.pathname; // lets imaging that url is "/home/x"
var pathArray = path.split( '/' );
var loc= pathArray[1];//number of part of url that is changing, here it rerurns x
injectTapEventPlugin();
export default ({ children }) => (
<MuiThemeProvider muiTheme={muiTheme}>
<div className="demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
{loc!=="signin" && path!=="/"?(<DashboardHeader/>):null}
{loc!=="signin" && path!=="/"?(<SideBar/>):null}
{children}
</div>
</MuiThemeProvider>
);
1) 使用简单的 if-else。
const DefaultRouteHandler = ({currentUser}) => {
if (currentUser) {
return <Home />;
}
return <Landing />;
};
2) 使用JavaScript三元运算符
const DefaultRouteHandler = ({currentUser}) => (
currentUser ? <Home /> : <Landing />
);
我基本上是在重构我的 React 组件以支持新的无状态功能组件 React functional component。但是,我对功能组件中的 if-else
语法感到困惑。
旧代码(工作正常):它所做的基本上是查找用户当前是否已登录。如果是,则重定向到主页,否则重定向到着陆页。 CurrentUser 组件 return 是一个道具 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
条件。正如您现在看到的那样,它将始终 return 主页。
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
组件代码。但是,我认为它对这个问题没有任何作用。
const DefaultRouteHandler = ({currentUser}) => {
if (currentUser) {
return <Home />;
}
return <Landing />;
};
终于找到问题了。我必须对我的新代码进行 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
组件的道具。
在无状态组件中使用条件显示多个导入组件。 在您的 SPA 中明智地显示状况 header 在 App.js 文件中
var path= window.location.pathname; // lets imaging that url is "/home/x"
var pathArray = path.split( '/' );
var loc= pathArray[1];//number of part of url that is changing, here it rerurns x
injectTapEventPlugin();
export default ({ children }) => (
<MuiThemeProvider muiTheme={muiTheme}>
<div className="demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header">
{loc!=="signin" && path!=="/"?(<DashboardHeader/>):null}
{loc!=="signin" && path!=="/"?(<SideBar/>):null}
{children}
</div>
</MuiThemeProvider>
);
1) 使用简单的 if-else。
const DefaultRouteHandler = ({currentUser}) => {
if (currentUser) {
return <Home />;
}
return <Landing />;
};
2) 使用JavaScript三元运算符
const DefaultRouteHandler = ({currentUser}) => (
currentUser ? <Home /> : <Landing />
);