在React中有条件地渲染组件

时间:2018-06-05 18:12:45

标签: javascript reactjs

我根据用户是否登录有条件地在主页上呈现组件。这是我的代码,

class Wrapper extends React.Component{
    constructor(props){
        super(props);
    }
    render(){
        const comp = this.state.loggedIn ? (
            <BrowserRouter>
                <div className="wrapper">
                    <Header state={props.state}/>
                    <CoreLogged state={props.state}/>
                </div>
            </BrowserRouter>

        ):(
            <BrowserRouter>
                <div className="wrapper">
                    <Header state={props.state}/>
                    <CoreUnlogged state={props.state}/>
                </div>
            </BrowserRouter>
        );
        return (comp);
    }
}
export default Wrapper

由于无论是否呈现标题组件,如何重构此代码只能有条件地呈现Core部分? 因此,我是React的新人。

1 个答案:

答案 0 :(得分:4)

只需将常用的东西拉出来,然后使用{}来执行条件。您也可以在没有变量的情况下返回:

render() {
  return <BrowserRouter>
    <div className="wrapper">
      <Header state={ props.state } />
      { this.state.loggedIn ? (
          <CoreLogged state={ props.state } />
        ) : (
          <CoreUnlogged state={ props.state } />
        )
      }
    </div>
  </BrowserRouter>;
}

如果组件具有相同的确切属性,您也可以将该组件本身放在变量中:

render() {
  const MainComp = this.state.loggedIn ? CoreLogged : CoreUnlogged;

  return <BrowserRouter>
    <div className="wrapper">
      <Header state={ props.state } />
      <MainComp state={ props.state } />
    </div>
  </BrowserRouter>;
}

请注意,在这种情况下,变量必须以大写字母开头,否则React会尝试将其渲染为内置HTML组件。