redux dispatch不起作用

问题描述 投票:1回答:1

我是一个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

redux dispatch
1个回答
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());
© www.soinside.com 2019 - 2024. All rights reserved.