gpt4 book ai didi

javascript - 组件渲染多次 - 多个获取函数

转载 作者:行者123 更新时间:2023-11-30 08:20:33 25 4
gpt4 key购买 nike

我的组件渲染了 4 次,这似乎是由 fetching 和多个 setState 函数引起的。我怎样才能让它只使用一个 setState() 来包含所有获取的数据?

我已经尝试创建一个函数而不是一个函数,创建三个变量来存储获取结果并将它们传递给 setState 但它对我没有帮助。提前致谢!

class DuelList extends React.Component {
state = {
duels: [],
users: [],
datasets: []
};

fetchDuels = () => {
axios.get("http://127.0.0.1:8000/api/duel/user/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
duels: res.data
});
});
};

fetchUsers = () => {
axios.get("http://127.0.0.1:8000/api/user/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
users: res.data
});
});
};

fetchDatasets = () => {
axios.get("http://127.0.0.1:8000/api/dataset/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
.then(res => {
this.setState({
datasets: res.data
});
});
};


componentDidMount() {
this.fetchDuels();
this.fetchUsers();
this.fetchDatasets();
}


render() {
return (
<div>
<Duels data={this.state.duels}/> <br/>
<h2> Add duel </h2>
<AddDuelForm users={this.state.users} datasets={this.state.datasets} requestType="post" articleID={null}
btnText="Challenge"/>
</div>
);
}
}

export default DuelList;```


最佳答案

您需要将所有 promise 分组并一起解决:<​​/p>

    fetchDuels = () => {
return axios.get("http://127.0.0.1:8000/api/duel/user/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
};

fetchUsers = () => {
return axios.get("http://127.0.0.1:8000/api/user/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
};

fetchDatasets = () => {
return axios.get("http://127.0.0.1:8000/api/dataset/",
{'headers': {'Authorization': `Token ${localStorage.getItem('token')}`}})
};


componentDidMount() {
const promises = [this.fetchDuels(), this.fetchUsers(), this.fetchDatasets()];

Promise.all(promises).then(([ duelsReponse, usersResponse, datasetsReponse ]) => {
this.setState({ duels: duelsReponse.data, users: usersReponse.data, datasets: datasetsResponse.data });
});
}

这样,您可以减少 setState 调用的次数。

关于javascript - 组件渲染多次 - 多个获取函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com