Проблема заключается в том, что каждый раз, когда происходит обращение к случаю FETCH_USERS в вашем редукторе, он добавляет дополнительные данные (action.payload) поверх ваших существующих данных (состояние).Так как это происходит каждый раз, когда ваш компонент монтируется, он часто добавляет старые данные в массив.Вот ситуация, объясненная более подробно:
если ваша полезная нагрузка равна массиву ["id1", "id2"], то при первом монтировании компонента это будет переведено в состояние, которое составит
state = ["id1", "id2"]
В следующий раз, когда компонент монтируется, пользовательский массив все равно будет равен ["id1", "id2"], возможно, с добавлением новых пользователей или их уже нет.Допустим, "id3" также добавлен.Редуктор берет это и добавляет его в предыдущее состояние:
state = ["id1", "id2"]
action.payload = ["id1", "id2", "id3"]
так ...
return [...state, ...action.payload] = [ "id1", "id2", "id1", "id2", "id3" ]
Добавлены повторы.
Чтобы это исправить, вам нужнопросто заполните состояние полезной нагрузкой, и не сохраняйте предыдущее состояние, поскольку список пользователей извлекается снова без фильтрации ранее существующих пользователей
return [...action.payload]
Теперь ваш редуктор должен выглядеть следующим образом:
import { FETCH_USERS } from '../actions/user'
let initialState = []
export default (state = initialState, action) => {
switch (action.type) {
case FETCH_USERS:
return [...action.payload]
default:
return state
}
}