2016-11-01 84 views
1

我有一个反应组件,我想呈现一个字符串单词列表里面,我有一个数组中的单词,我可以申请map上面的问题是,我想。设置一个指数作为列表中的每个对象键 以下是部分:反应:意外的令牌,预计(

export default class RandomWords extends Component{ 

    var ID=-1; 
    createWord(word){ 
    ID++; 
    return ({ 
     id:ID, 
     text:word 
    }); 

    } 

    renderList(){ 

     return this.props.words.map((word)=>{ 
      const wrappedText=this.createWord(word); 
      return (<li key={wrappedText.id} className="item"> 
        <Word value={wrappedText.text}></Word> 
      </li>); 
     }) 
    } 
     render(){ 
     // console.log("words are:"+this.props.words); 
      return(
        <ul className="list"> 
         {this.renderList()} 
       </ul>) 
     }; 
} 

来生成ID,我已经看到了this,和我做的createWord(word)功能,但在该行var ID=-1;它抱怨附:

Unexpected token, expected ( 

1-我的代码有什么问题?

2 - 如何设置从0开始到列表的整数?

+2

你不能把一个'var'自由浮动在那样的类..想到的'类“就像一个常规的JavaScript对象,它是一个列表键值,其中的值是函数。把'var'放在你的类定义之上 – azium

回答

0

正如在评论中指出,你不能有var这样的自由浮动。无论如何,更好的解决方案是使用内置索引map。由于这是一台发电机的功能,第二个参数是索引,因此,您可以将您的逻辑更改为:

return this.props.words.map((word, i)=>{ 
    return (<li key={i} className="item"> 
     <Word value={word}></Word> 
    </li>); 
}) 
1

您只能将方法放在ES6类中。取而代之的是,重写你的类是这样的:

export default class RandomWords extends Component { 

    constructor(props) { 
    super(props); 
    this.ID = -1; 
    } 

    createWord(word){ 
    this.ID++; 
    return ({ 
     id: this.ID, 
     text: word 
    }); 

    } 
    // ... 
} 

,或者,如果你想ID要在全球范围内增加的所有实例:

let ID = -1; 
export default class RandomWords extends Component { 

    createWord(word){ 
    ID++; 
    return ({ 
     id: ID, 
     text: word 
    }); 

    } 
    // ... 
}