【发布时间】:2018-07-18 19:08:43
【问题描述】:
有人可以帮我解决如何在componentDidUpdate 中设置状态并且没有无限循环吗?有些建议说有条件语句,但我不太熟悉如何为我的代码设置条件。
这是我的代码的样子:
我有一个仪表板组件,它从发生提取的外部函数获取所有公司和项目数据,然后更新状态。这些项目与公司的 id 相关联。
我能够以 JSON 格式获取所有项目的列表,但我不知道如何在渲染后在 componentDidUpdate 中更新我的项目状态。
CompanyDashboard.js
import { getCompanys } from "../../actions/companyActions";
import { getProjects } from "../../actions/projectActions";
class CompanyDashboard extends Component {
constructor(props) {
super(props);
this.state = {
companies: [],
projects: []
};
}
componentWillMount() {
// get all companies and update state
getCompanys().then(companies => this.setState({ companies }));
}
componentDidUpdate(prevState) {
this.setState({ projects: this.state.projects });
}
render() {
const { companies, projects } = this.state;
{
companies.map(company => {
// get all the projects
return getProjects(company);
});
}
return <div />;
}
}
export default CompanyDashboard;
companyActions.js
import { getUser, getUserToken } from './cognitoActions';
import config from '../../config';
export function getCompanys() {
let url = config.base_url + '/companys';
return fetch(url, {
method: 'GET',
headers: {'token': getUserToken() }
})
.then(res => res.json())
.then(data => { return data })
.catch(err => console.log(err));
}
projectActions.js
import { getUserToken } from './cognitoActions';
import config from '../../config';
export function getProjects(company) {
let url = config.base_url + `/companys/${company._id['$oid']}/projects`;
return fetch(url, {
method: 'GET',
headers: {'token': getUserToken() }
})
.then(res => res.json())
.then(data => { return data })
.catch(err => console.log(err));
}
【问题讨论】:
标签: javascript json reactjs infinite-loop