How to loop an object in React?

后端 未结 5 1778
误落风尘
误落风尘 2020-11-30 02:28

New to React and trying to loop Object attributes but React complains about Objects not being valid React children, can someone please give me some advice on how to resolve

相关标签:
5条回答
  • 2020-11-30 02:41

    You can use it in a more compact way as:

    var tifs = {1: 'Joe', 2: 'Jane'};
    ...
    
    return (
       <select id="tif" name="tif" onChange={this.handleChange}>  
          { Object.entries(tifs).map((t,k) => <option key={k} value={t[0]}>{t[1]}</option>) }          
       </select>
    )
    

    And another slightly different flavour:

     Object.entries(tifs).map(([key,value],i) => <option key={i} value={key}>{value}</option>)  
    
    0 讨论(0)
  • 2020-11-30 02:41

    you could also just have a return div like the one below and use the built in template literals of Javascript :

    const tifs = {1: 'Joe', 2: 'Jane'};
    
    return(
    
            <div>
                {Object.keys(tifOptions).map((key)=>(
                    <p>{paragraphs[`${key}`]}</p>
                ))}
            </div>
        )
    
    0 讨论(0)
  • 2020-11-30 02:41
    const tifOptions = [];
    
    for (const [key, value] of Object.entries(tifs)) {
        tifOptions.push(<option value={key} key={key}>{value}</option>);
    }
    
    return (
       <select id="tif" name="tif" onChange={this.handleChange}>  
          { tifOptions }          
       </select>
    )
    
    0 讨论(0)
  • 2020-11-30 02:44

    I highly suggest you to use an array instead of an object if you're doing react itteration, this is a syntax I use it ofen.

    const rooms = this.state.array.map((e, i) =>(<div key={i}>{e}</div>))
    

    To use the element, just place {rooms} in your jsx.

    Where e=elements of the arrays and i=index of the element. Read more here. If your looking for itteration, this is the way to do it.

    0 讨论(0)
  • 2020-11-30 02:54

    The problem is the way you're using forEach(), as it will always return undefined. You're probably looking for the map() method, which returns a new array:

    var tifOptions = Object.keys(tifs).map(function(key) {
        return <option value={key}>{tifs[key]}</option>
    });
    

    If you still want to use forEach(), you'd have to do something like this:

    var tifOptions = [];
    
    Object.keys(tifs).forEach(function(key) {
        tifOptions.push(<option value={key}>{tifs[key]}</option>);
    });
    

    Update:

    If you're writing ES6, you can accomplish the same thing a bit neater using an arrow function:

    const tifOptions = Object.keys(tifs).map(key => 
        <option value={key}>{tifs[key]}</option>
    )
    

    Here's a fiddle showing all options mentioned above: https://jsfiddle.net/fs7sagep/

    0 讨论(0)
提交回复
热议问题