为什么会一直运行这个函数?

组件中是这样的:

<Tag color={this.getTagColor()}>{item.roleName}</Tag>

函数是这样的:

getTagColor = () => {
        const colors = ['magenta', 'volcano', 'gold', 'green', 'blue', 'cyan'];
        const index = Math.floor(colors.length * Math.random());
        return colors[index];
    }

运行以后color的值会不停地变化 像是一值在运行这个函数

我希望的是运行一次就行了

如何解决呢?

阅读 1.6k
2 个回答

你应该把这个方法的执行放在组件render之前,也就是componentWillMount里面,然后用state存起来

state = {
  tagColor: ""
};

componentWillMount(){
  setState({
      tagColor: this.getTagColor()
  })
}

render(){
  return <Tag color={tagColor}></Tag>
}

你这里一直执行是因为,在render的时候调用了getTagColor方法,然后改变了color,react检测到值改变了又会继续render,然后就无限循环了,像这种固定的值在组件渲染之间就可以先请求然后存起来用的

render(){
  const tagColor=this.getTagColor();
  return <Tag color={tagColor}></Tag>
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题