Попробуйте следующее:
const loadedContent = () => <div>{this.props.loadedContentFromRedux}</div>
<Loader
isLoading={loading}
isError={error}
loadedContent={loadedContent}
/>
Измените компонент Loader на:
class Loader extends Component {
render() {
return this.props.isLoading ? <Spinner /> :
this.props.isError ? <Error /> :
this.props.loadedContent()
}
}
Делая это, вы не выполняете loadedContent во время передачи, поэтому выполнение this.props.loadedContentFromRedux
не будет случиться. Он будет выполняться в компоненте Loader
в методе рендеринга.
Отредактированный ответ
Я смог развить это и немного изменить синтаксис, чтобы он был проще для глаз, и передать функцию как дочерний элемент. Это требует проверки типа в рендере Loader
как таковом:
<Loader
isLoading={loading}
isError={error}>
{() => <div>{this.props.loadedContentFromRedux}</div>}
</Loader>
Затем защититесь от типа функции следующим образом - это потому, что JSX иногда преждевременно оценивается:
class Loader extends Component {
render() {
return this.props.isLoading ? <Spinner /> :
this.props.isError ? <Error /> :
typeof this.props.children==='function' ? this.props.children() :
this.props.children
}
}