【发布时间】:2020-04-09 23:58:50
【问题描述】:
这是上一篇文章的一部分:What's the React best practice for getting data that will be used for page render?
我正在使用 useState([]) 将对象添加到数组中。每个对象都有一个 firstName 和一个 lastName 值。我想将所有名字和姓氏的所有长度相加得到总字符数,这样我就可以得到每个名字的平均长度。
我目前的值是错误的:firstName (100) lastName (106)
值应该是 6 & 7
const [players, setPlayers] = useState([]);
const [firstNameCount, setFirstNameCount] = useState(0);
const [lastNameCount, setLastNameCount] = useState(0);
useEffect(() => {
setPlayers([]);
teams.forEach(teamId => {
axios.defaults.headers.common['Authorization'] = authKey;
axios.get(endPoints.roster + teamId)
.then((response) => {
let teamPlayers = response.data.teamPlayers;
console.log(response.data.teamPlayers)
setPlayers(prevPlayers => [...prevPlayers, ...teamPlayers]);
})
.catch((error) => {
console.log(error);
})
});
}, [teams]);
useEffect(() => {
players.forEach(player => {
setFirstNameCount(prevCount => prevCount + player.firstName.length);
setLastNameCount(prevCount => prevCount + player.lastName.length);
})
}, [players]);
如果我把代码改成这个
useEffect(() => {
setPlayers([]);
teams.forEach(teamId => {
axios.defaults.headers.common['Authorization'] = authKey;
axios.get(endPoints.roster + teamId)
.then((response) => {
let teamPlayers = response.data.teamPlayers;
console.log(response.data.teamPlayers)
setPlayers(prevPlayers => [...prevPlayers, ...teamPlayers]);
teamPlayers.forEach(player => {
setFirstNameCount(prevCount => prevCount + player.firstName.length);
setLastNameCount(prevCount => prevCount + player.lastName.length);
})
})
.catch((error) => {
console.log(error);
})
});
}, [teams]);
它大大减慢了渲染速度,我得到:firstName (7),lastName (7),这仍然是错误的。
【问题讨论】:
标签: reactjs react-hooks