减速器状态返回NaN值

时间:2019-07-14 11:43:58

标签: redux react-redux

我定义了一个化简器,但是它总是返回NaN值而不是数字。我在store.js中定义了一个单一存储,例如createStore(reducer,{},applyMiddleWire()。减速器正在工作,但始终返回NaN值。

import { INCREMENT, DECREMENT } from "./buttonAction";

const initialState = {
  counter: 1
};

const Count = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      state = {
        ...state,
        counter: state.counter + 1
      };
      console.log("Number", state);
      break;
    case "DECREMENT":
      state = {
        ...state,
        counter: state.counter + 1
      };
      console.log("Number", state);

      break;
    default:
  }
  return state;
};

export default Count;

2 个答案:

答案 0 :(得分:0)

我一直在寻找相同的错误,我想也许您的问题与其他人说的一样,是因为未在Component(method-properties)中定义有效负载。

我解决了关于Redux生命周期的错误,并学到了其他一些东西。

https://codesandbox.io/s/react-redux-counter-03-xjqnq

increment = () => {
  // this.setState({ count: this.state.count + 1 });
  this.props.dispatch({ type: "INCREMENT", payload: 5 });
};
decrement = () => {
  // this.setState({ count: this.state.count - 1 });
  this.props.dispatch({ type: "DECREMENT", payload: 3 });
};    enter code here

答案 1 :(得分:0)

在SWITCH情况下,您需要返回新状态。

重点是Redux状态不同于React状态。 更改React状态时,setState()仅更改状态的特定部分,而其他状态内容保持不变。

另一方面,Redux希望您始终返回新状态,即新对象。 Redux不像React那样合并旧状态和新状态。因此答案是,您需要在每种开关情况下创建一个新对象并将其返回,Redux将用新状态替换旧状态。

switch (action.type) {
case "INCREMENT":
 return {
    ...state,
    counter: state.counter + 1
  };
  console.log("Number", state);
  break;