Я создал хранилище данных с избыточностью, в котором я хочу в основном хранить индекс домашних животных, которые понравились пользователю или не понравились пользователю. Я столкнулся с проблемой, когда я получаю сообщение об ошибке, когда TypeError: .push не определен. Я следую базовому учебнику по сокращению, упомянутому здесь, https://thewikihow.com/video_KcC8KZ_Ga2M Меня смущает тот факт, что массив I сначала определяется, а затем не определяется, когда я помещаю целое число в массив.
ProfileApp.js
class ProfileApp extends React.Component {
constructor(props) {
super(props)
.........(Truncated for brevity)
.........(Truncated for brevity)
}
componentWillMount() {
.........(Truncated for brevity)
this.props.likePets(this.state.currentIndex);
.........(Truncated for brevity)
this.props.dislikePets(this.state.currentIndex);
}
function mapStateToProps(state){
return {
likedPets: state.likedPets,
dislikedPets: state.dislikedPets
}
}
function mapDispatchToProps(dispatch){
return{
likePets: (i)=> dispatch({type:'LIKE_PETS'}),
dislikePets: (i)=> dispatch({type:'DISLIKE_PETS'})
}
}
export default connect(mapStateToProps)(ProfileApp)
App.js
import ProfileApp from './src/ProfileApp';
import {Provider} from 'react-redux';/
const initialState = {
likedPets: [],
dislikedPets: []
}
const reducer = (state = initialState, action) =>{
console.info(state.likedPets)
console.info(state.dislikedPets)
switch (action.type){
case 'LIKE_PETS':
return{likedPets: likedPets.push(action.index)}
case 'DISLIKE_PETS':
return{dislikedPets:dislikedPets.push(action.index)}
}
return state
}
const store = createStore(reducer);
export default class App extends React.Component {
render() {
return (
<Provider store = {store}>
<ProfileApp></ProfileApp>
</Provider>
)
}
}
вывод, когда я впервые компилирую этот код на консоли, выглядит следующим образом: при начальной загрузке:
Array []
Array []
Running application "main" with appParams:.....(Trimed)
Действия пользователя: как домашнее животное
Array []
Array []
Действия пользователя: как другой питомец
1
undefined



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно передать свою картуDispatchToProps в соединение:
export default connect(mapStateToProps)(ProfileApp)
к
export default connect(mapStateToProps, mapDispatchToProps)(ProfileApp)
Вам нужно распространить свое состояние в редукторе:
return{likedPets: likedPets.push(action.index)}
к
return{...state, likedPets: likedPets.push(action.index)}
в противном случае вы перезаписываете состояние в магазине объектом, на котором нет ваших нелюбимых питомцев.
Также метод массивов push возвращает длину массива. Замените это на
likedPets: [...state.likedPets,action.index]
Чтобы получить массив, который является текущим состоянием (likedPets) с добавленным к нему action.index.