Вы назначаете this.state.recentPro
и this.state.ratedPro
для ссылки на один и тот же массив.Затем вы изменяете этот массив, что приведет к тому, что изменение будет отражено как в this.state.recentPro
, так и в this.state.ratedPro
, поскольку обе эти переменные ссылаются на один и тот же (теперь мутировавший) массив.
Вы можете поверхностно скопировать массивс slice()
для достижения различной сортировки на двух массивах:
this.setState({
recentPro: responseJson.products.slice(),
ratedPro:responseJson.products.slice(),
},
Вы также запускаете ненужные и преждевременные рендеры, вызывая setState
несколько раз, рассмотрите следующее более краткое решение, которое также лишает здравомыслияпроверяет response
, чтобы приложение не зависело от ответа API, из которого вы получаете данные:
fetch(url)
.then(response => response.json())
.then(responseJson => {
const { products } = responseJson
if (products && Array.isArray(products)) {
const recentPro = products.slice()
const ratedPro = products.slice().sort((a, b) => Number(b.rate) - Number(a.rate))
this.setState({
recentPro,
ratedPro,
})
} else { /* display error to user */ }
}