简体   繁体   English

如何在jsx中使用if else条件?

[英]how to use if else condition in jsx?

 class Wrapper extends React.Component { content() { if (this.props.isLoading) { return ( <Layout> <Loader /> </Layout> ); } else if (this.props.isError) { return ( <Layout> <Error errorMsg={this.props.error} /> </Layout> ); } else { return ( <Layout> {this.props.isSuccess ? <h1>success</h1> : <h1>some failure</h1>} </Layout> ); } } render() { return this.content(); } } export default Wrapper; 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 

i have the above code , here i am using layout in every condition , actual <Layout> component is really heavy , so i want to use layout only once and trying to rewrite the code something like the below code. 我有上面的代码,在这里我在每种情况下都使用layout,实际的<Layout>组件真的很重,所以我只想使用一次layout并尝试重写下面的代码。 but its not rendering anything except layout. 但除了布局之外,它不会渲染任何内容。

 class Wrapper extends React.Component { content() { return ( <Layout> {(()=>{ if (this.props.isLoading) { <Loader /> }else if(this.props.isError){ <Error errorMsg={this.props.error} /> }else if(this.props.isSuccess){ <h1>success</h1> } })()} </Layout> ); } render() { return this.content(); } } export default Wrapper; 

How about something like this? 这样的事情怎么样?

class Wrapper extends React.Component {
    render() {
        return (
            <Layout>
                {this.props.loading &&
                    <Loader />
                }
                {this.props.error &&
                    <Error errorMsg={this.props.error} />
                }
                {this.props.succes &&
                    <h1>success</h1>
                }
            </Layout>
        );
    }
}

export default Wrapper;

Because you forgot to return the elements, by default function returns undefined. 因为您忘记返回元素,所以默认情况下函数返回未定义。 You defined a iife that will not return the result automatically, you need to do that. 您定义了一个不会自动返回结果的Iife ,您需要这样做。

Write it like this: 像这样写:

{(()=>{
    if (this.props.isLoading) {
        return <Loader />
    }else if(this.props.isError){
        return <Error errorMsg={this.props.error} />
    }else if(this.props.isSuccess){  
        return <h1>success</h1>   
    }

})()}

Consider this example to make the picture more clear, in this case renderElement function will return undefined, and nothing will get rendered. 请考虑以下示例,以使图片更清晰,在这种情况下, renderElement函数将返回undefined,并且不会渲染任何内容。

render(){
    return (
        <div>
            {this.renderElement()}
        </div>
    )
}


// it will not return anything    
renderElement(){
    if (this.props.isLoading) {
        <Loader />
    }else if(this.props.isError){
        <Error errorMsg={this.props.error} />
    }else if(this.props.isSuccess){  
        <h1>success</h1>   
    }
}
class Wrapper extends React.Component {

  render() {
   let content, message;

   this.props.error ? message = <Error errorMsg={this.props.error}> : null
   this.props.success ? message =  <h1>success</h1> : null
   this.props.isLoading ? content = <Loader/> : content = message

   return (
      <Layout>
         {content}
      </Layout>
    )}
}

export default Wrapper;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM