Early returns in React sub render function: return null, [], or React.Fragment?
Let's say I have a simple component that may or may not render a Counter.
What's the best practice in React to express a blocked code path? Should it return null
, , or a
Fragment
?
class App extends Component {
renderCounter() {
if (!this.props.shouldRenderCounter) {
// // which should I return?
// return;
// return null;
// return ;
// return <React.Fragment />;
}
return <Counter />;
}
render() {
return (
<div>
{this.renderCounter()}
</div>
);
}
}
I think null
is the clearest, but I can imagine it causing problems if the context around the return function expects a component. and
Fragment
both seem like fine options to me, except Fragment is a little easier to read. What's the difference?
reactjs react-fragment
add a comment |
Let's say I have a simple component that may or may not render a Counter.
What's the best practice in React to express a blocked code path? Should it return null
, , or a
Fragment
?
class App extends Component {
renderCounter() {
if (!this.props.shouldRenderCounter) {
// // which should I return?
// return;
// return null;
// return ;
// return <React.Fragment />;
}
return <Counter />;
}
render() {
return (
<div>
{this.renderCounter()}
</div>
);
}
}
I think null
is the clearest, but I can imagine it causing problems if the context around the return function expects a component. and
Fragment
both seem like fine options to me, except Fragment is a little easier to read. What's the difference?
reactjs react-fragment
1
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34
add a comment |
Let's say I have a simple component that may or may not render a Counter.
What's the best practice in React to express a blocked code path? Should it return null
, , or a
Fragment
?
class App extends Component {
renderCounter() {
if (!this.props.shouldRenderCounter) {
// // which should I return?
// return;
// return null;
// return ;
// return <React.Fragment />;
}
return <Counter />;
}
render() {
return (
<div>
{this.renderCounter()}
</div>
);
}
}
I think null
is the clearest, but I can imagine it causing problems if the context around the return function expects a component. and
Fragment
both seem like fine options to me, except Fragment is a little easier to read. What's the difference?
reactjs react-fragment
Let's say I have a simple component that may or may not render a Counter.
What's the best practice in React to express a blocked code path? Should it return null
, , or a
Fragment
?
class App extends Component {
renderCounter() {
if (!this.props.shouldRenderCounter) {
// // which should I return?
// return;
// return null;
// return ;
// return <React.Fragment />;
}
return <Counter />;
}
render() {
return (
<div>
{this.renderCounter()}
</div>
);
}
}
I think null
is the clearest, but I can imagine it causing problems if the context around the return function expects a component. and
Fragment
both seem like fine options to me, except Fragment is a little easier to read. What's the difference?
reactjs react-fragment
reactjs react-fragment
edited Dec 17 '18 at 21:27
Tai
asked Nov 28 '18 at 17:02
TaiTai
988
988
1
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34
add a comment |
1
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34
1
1
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34
add a comment |
1 Answer
1
active
oldest
votes
You dont need to create an extra function for it.
This will do the job:
class App extends Component {
render() {
return (
<div>
{this.props.shouldRenderCounter && <Counter />}
</div>
);
}
}
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53524603%2fearly-returns-in-react-sub-render-function-return-null-or-react-fragment%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You dont need to create an extra function for it.
This will do the job:
class App extends Component {
render() {
return (
<div>
{this.props.shouldRenderCounter && <Counter />}
</div>
);
}
}
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
add a comment |
You dont need to create an extra function for it.
This will do the job:
class App extends Component {
render() {
return (
<div>
{this.props.shouldRenderCounter && <Counter />}
</div>
);
}
}
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
add a comment |
You dont need to create an extra function for it.
This will do the job:
class App extends Component {
render() {
return (
<div>
{this.props.shouldRenderCounter && <Counter />}
</div>
);
}
}
You dont need to create an extra function for it.
This will do the job:
class App extends Component {
render() {
return (
<div>
{this.props.shouldRenderCounter && <Counter />}
</div>
);
}
}
answered Nov 28 '18 at 17:06
Michael PloeckingerMichael Ploeckinger
1,288317
1,288317
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
add a comment |
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
1
1
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
My case is a contrived example. The actual code can’t be one-lined as easily
– Tai
Nov 28 '18 at 17:55
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
Yes. This doesn't answer the question. Came here for same reason as OP.
– eivindml
Mar 14 at 10:21
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53524603%2fearly-returns-in-react-sub-render-function-return-null-or-react-fragment%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
I would just go with null, but this seems to be mostly opinion based.
– Max
Nov 28 '18 at 17:34