>

저는 기본적으로 사용자가 좋아하거나 싫어하는 애완 동물의 색인을 저장하려는 redux 데이터 저장소를 만들었습니다. TypeError : .push가 정의되지 않은 경우 오류가 발생하는 문제에 직면하고 있습니다. 여기에 언급 된 기본 redux 자습서를 따르고 있습니다. https://www.youtube.com/watch? v = KcC8KZ_Ga2M 배열에서 정수를 푸시 할 때 배열이 먼저 정의 된 다음 정의되지 않았다는 사실에 혼동됩니다.

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.log(state.likedPets)
console.log(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


  • 답변 # 1

    연결할 때 mapDispatchToProps를 전달해야합니다 :

    export default connect(mapStateToProps)(ProfileApp)
    
    

    to

    export default connect(mapStateToProps, mapDispatchToProps)(ProfileApp)
    
    

    감속기에 상태를 전파해야합니다 :

    return{likedPets: likedPets.push(action.index)}
    
    

    to

    return{...state, likedPets: likedPets.push(action.index)}
    
    

    그렇지 않으면 상점의 상태를 싫어하는 애완 동물이없는 개체로 덮어 씁니다.

    배열의 push 메소드는 배열의 길이를 반환합니다.

    로 바꾸십시오
    likedPets: [...state.likedPets,action.index]
    
    

    action.index가 추가 된 현재 상태 (likedPets) 인 배열을 얻으려면

관련 자료

  • 이전 django - 인스턴스 모델의 속성이 변경되지 않는 이유
  • 다음 jmeter - jtl 파일에서 복합 그래프를 생성하는 방법