Return multiple elements inside React.render()
Solution 1:
In React < v16.0 the render
method can only render a single root node. (update: this is changed in v16, see below). In your case, you're returning 3 nodes. To get around this you can wrap your 3 nodes in a single root node:
render: function(){
return (
<div>
<h3>Account</h3>
<a href="#" onClick={some_event}>Login</a>
<a href="#" onClick={some_event}>Logout</a>
</div>
)}
In React v16 it's possible for render()
to return an array of elements.
Like with other arrays, you’ll need to add a key to each element to avoid the key warning:
render() {
return [
<ChildA key="key1" />,
<ChildB key="key2" />,
<ChildC key="key3" />,
];
}
Another option is to use a Fragment. Fragments let you group a list of children without adding extra nodes to the DOM.
render() {
return (
<React.Fragment>
<ChildA />
<ChildB />
<ChildC />
</React.Fragment>
);
}
There is also a short syntax (<>
) for declaring fragments:
render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
Solution 2:
Return an array of elements, separated by comma.
render: function(){
return ([
<h3>Account</h3>,
<a href="#" onClick={some_event}>Login</a>,
<a href="#" onClick={some_event}>Logout</a>
])
}
Solution 3:
You can use the following syntax for fragments in React 16.2+:
render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
Solution 4:
React.render is a JavaScript function returning the DOM elements. Since in JavaScript, functions cannot return multiple expressions, so we can't return multiple elements in React. The function returns the first expression immediately after the "return" keyword, and then the function dies. That's why we are able to do this:
if(1) { return 1 } return 2