【发布时间】:2018-02-20 17:35:46
【问题描述】:
import React, {Component} from 'react'
import ajax from '../confing/ajax'
import $ from 'jquery'
class Categories extends Component {
constructor(props) {
super(props);
this.state = {
isActive: '',
categories: ''
};
this.switchLinkToActive = this.switchLinkToActive.bind(this);
}
switchLinkToActive(event) {
event.preventDefault();
let temp = [];
console.log(event.target.id);
for (let i = 0; i < this.state.isActive.length; i++) {
if (i === parseInt(event.target.id)) {
temp[i] = true;
} else {
temp[i] = false;
}
}
this.setState({
isActive: temp
})
}
func() {
let categories = [];
ajax.request.get('categories').then((resp) => {
let isActive = new Array(resp.length);
for (let i = 0; i < resp.length; i++) {
isActive[i] = false;
}
this.setState({
isActive: isActive
});
for (let i = 0; i < resp.length; i++) {
let element = resp[i];
categories.push(<a key={element.id} href=""
className={this.state.isActive[i] === true ? "list-group-item list-group-item-action active" : "list-group-item list-group-item-action"}
id={i} onClick={this.switchLinkToActive}>{element.name}</a>);
}
this.setState({
categories: categories
});
});
}
render() {
this.func();
return (
<div className="list-group col-3">
{/*{this.state.categories}*/}
<a key={2} href=""
className={this.state.isActive[2] === true ? "list-group-item list-group-item-action active" : "list-group-item list-group-item-action"}
id={2} onClick={this.switchLinkToActive}>Custom lemenet</a>
</div>
)
}
}
export default Categories;
在这个例子中,我在render() 方法中调用func(),它会导致类似于stackoverflow 的东西,它只是不会停止调用它。无论如何要解决这个问题?我真的没有找到任何解决方案。如果我说只是在渲染内做一个 for 循环,它会按预期工作,它只被调用一次,那么为什么这个函数被调用了无数次
【问题讨论】:
标签: function reactjs call render callstack