2017-12-31 33 views
0

저는 초보자입니다. 모든 것이 지금 당황 스럽습니다. 저장소를 만들고 저장소에 새로운 값을 보내려고하지만 작동하지 않습니다. 누군가 도움이 될 수 있습니까? 덕분에redux 파견이 작동하지 않습니다

import {createStore, combineReducers} from 'redux'; 
import uuid from 'uuid'; 

const state={ 
    id:0, 
    numbers:[] 
} 

const randomNumber=()=>{...} 

//reducer 

const reducer=(state={},action)=>{ 
    switch(action.type){ 
     case 'ADD_NUMBER': 
     const newNumber={id:state.id+1, number:randomNumber()} 
     return { 
      ...state, 
      id:uuid(), 
      numbers:[...state.numbers,newNumber] 
     } 
    } 
} 

//store 
const store=createStore(reducer) 
store.subscribe(()=>{const state=store.getState}) 
console.log('new state should update, but it does not: ', state) 

const addNumber =()=>({type: 'ADD_NUMBER'}) 

//dispatch 
store.dispatch(addNumber()) 

enter image description here

+0

작동하지 않는 방법에 대한 자세한 정보를 제공 할 수 있습니까? 어떤 오류가 있습니까, 그렇다면 무엇입니까? 오류가 발생하지 않으면 감속기가 호출되는지 확인 했습니까? 또는 전혀 아무 일도 일어나지 않습니까? –

+0

예 오류가 발생했습니다. 오류로 인해 내 질문이 업데이트되었습니다. 제발, console.log를 상태로 사용했지만 제 코드를 삭제하여 코드를 더 짧게 만듭니다. – Nhat

답변

4

문제는이 라인에 내 오류, 당신은 빈 객체 {}에 상태를 초기화 한

const reducer = (state = {}, action) => { 

주입니다. 따라서 state.numbers을 전파하려고 시도하면 numbers이 초기 상태로 정의되어 있지 않으므로이 오류가 발생합니다.

return { 
    ...state, 
    id:uuid(), 
    numbers:[...state.numbers,newNumber] 
} 

문제를 재현 최소한의 예를 들어,

const bad = (state = {}) => { 
 
    return { 
 
    numbers:[...state.numbers] 
 
    } 
 
} 
 

 
bad();

는 기본 값으로 상태를 초기화해야이 문제를 해결하려면

const INITIAL_STATE = { 
    id:0, 
    numbers:[] 
} 


//reducer 
const reducer = (state = INITIAL_STATE, action) => { 

// Rest of the code 

const INITIAL_STATE = { 
 
    id:0, 
 
    numbers:[] 
 
} 
 
    
 
const good = (state = INITIAL_STATE) => { 
 
    return { 
 
    numbers:[...state.numbers] 
 
    } 
 
} 
 

 
console.log(good());