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>
我有上面的代码,这里我在各种条件下使用布局,
实际的<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;
答案 0 :(得分:2)
这样的事情怎么样?
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;
答案 1 :(得分:1)
因为忘记返回元素,默认情况下函数返回undefined。您定义了一个iife,它不会自动返回结果,您需要这样做。
像这样写:
{(()=>{
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>
}
})()}
考虑这个例子使图片更清晰,在这种情况下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>
}
}
答案 2 :(得分:1)
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;