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;


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку вы забыли вернуть элементы, по умолчанию функция возвращает значение 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>
}
}
Как насчет этого?
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;
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;