Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React equivalent for ng-repeat

I am new to React.js. I am trying to bind data arrays. I am looking for the equivalent of ng-repeat, but i can't find it inside documentation.

e.g:

var data =  ['red', 'green', 'blue']

using angular i would have done something like this in my html:

<div ng-repeat="i in data">{{i}}</div>

I am wondering the React's markup to do this

like image 613
Morrisda Avatar asked Mar 11 '15 18:03

Morrisda


People also ask

What is equivalent of Ngfor in React?

RepeatModule is the equivalent in Reactjs ReactDOM.

How do you repeat an element in React?

Using the Array map function is a very common way to loop through an Array of elements and create components according to them in React. This is a great way to do a loop which is a pretty efficient and is a tidy way to do your loops in JSX.

Are there for loops in React?

To For Loop or Map in React As with most things in web development, there are multiple ways to loop, or iterate, through an array in React using JavaScript.

What is Ng repeat?

Definition and Usage The ng-repeat directive repeats a set of HTML, a given number of times. The set of HTML will be repeated once per item in a collection. The collection must be an array or an object. Note: Each instance of the repetition is given its own scope, which consist of the current item.


4 Answers

In React, you just write the necessary JavaScript (and potentially build it into a reusable control as you'll see). It's very prescriptive and easy to do once you learn the basic patterns (and how they differ from AngularJS).

So, in the render function, you'd need to iterate through the list. In the example below, I've used map, but you could use other iterators as needed.

var List = React.createClass({
    render: function() {
        return (<div>
        { this.props.data.map(function(item) {
                return <div>{item}</div>
            })
        }
        </div>);
    }
});

var data =  ['red', 'green', 'blue'];

React.render(<List data={ data }  />, document.body);

Here it is in use.

And, as you can see, you can quickly build a reusable component that can "repeat" through the list.

like image 150
WiredPrairie Avatar answered Oct 09 '22 07:10

WiredPrairie


Should just be:

{data.map(i => <div>{i}</div>)}
like image 30
Jim Bolla Avatar answered Oct 09 '22 08:10

Jim Bolla


In your render function inside a react component you can do this:

var data =  ['red', 'green', 'blue'];
var dataComponent = [];
data.forEach(function (dataValue) {
    dataComponent.push(<div> {dataValue} </div>);
});

And now you can return the dataComponent.

like image 30
Michel Uncini Avatar answered Oct 09 '22 08:10

Michel Uncini


Here is an example using ES6, and a stateless component.

The below code demonstrates creating a menu by looping through a list of menu items.

import React from 'react';
import Menu from 'material-ui/lib/menus/menu';
import MenuItem from 'material-ui/lib/menus/menu-item';


const menuItems = [
    {route: '/questions', text: 'Questions'},
    {route: '/jobs', text: 'Jobs'},
    {route: '/tags', text: 'Tags'},
    {route: '/users', text: 'Users'},
    {route: '/badges', text: 'Badges'}
    {route: '/questions/new', text: 'Ask Question'}

].map((item, index) => <MenuItem key={index} primaryText={item.text} value={item.route} />);


const Sidebar = ({history}) => (
    <Menu
        autoWidth={false}
        onItemTouchTap={(e, child) => history.push(child.props.value)}
    >
        {menuItems}
    </Menu>
);


export default Sidebar;

Basically what we're doing is just pure javascript iteration utilizing Array.map.

like image 40
Kirill Fuchs Avatar answered Oct 09 '22 07:10

Kirill Fuchs