Javascript Redux操作返回未定义的

Javascript Redux操作返回未定义的,javascript,reactjs,ecmascript-6,redux,Javascript,Reactjs,Ecmascript 6,Redux,我有以下减速器: export const showResult = (state = [], action) => { switch (action.type) { case 'GET_NUMBER': return [ ...state, action.n ] case 'CLEAR_NUMBER': return [ ...state

我有以下减速器:

export const showResult = (state = [], action) => {
    switch (action.type) {
      case 'GET_NUMBER': 
        return [
          ...state,
          action.n
        ]
      case 'CLEAR_NUMBER':
         return [
          ...state
        ].pop()
      case 'RESET_RESULT': 
        return []
      default:
        return state
    }
  }
单击“deleteNumber”时满足“CLEAR_NUMBER”情况:

import React, { Component } from 'react'
import Display from './Container'
import Operator from './Container'
import { selectOperator } from './../util'

class Calculator extends Component {
    constructor(props) {
      super(props)

      this.state = {
          val1: '',
          val2: ''
      }

    }
    displayNumber = e => {
        const { getNumber, resetResult, getOperator } = this.props
        getNumber(parseInt(e.target.dataset.n))
    }

    getOperator = e => {
        const { getOperator, n, resetResult, resetOperator } = this.props
        resetOperator()
        getOperator(e.target.dataset.sign)

        if(this.state.val1 == "") {
            this.setState({
                val1: n
            })
            resetResult()
        }

    }
    getSum = val => {
        val.reduce((acc, val) => acc + val)
    }
    deleteNumber = () => {
        const { clearNumber } = this.props
        clearNumber()
    }
    getTotal = () => {
        const { n, operator, resetResult } = this.props,
            { val1, val2 } = this.state,
            value1 = this.getSum(val1),
            value2 = val2 != "" ? this.getSum(val2) : null;
        let operatorVal = operator[0]

        this.setState({ val2: n })
        resetResult()
        selectOperator(operatorVal, value1, value2)

    }
    render() {
        const { n, operator, getNumber } = this.props
        return (
            <div>
                <Display val={n == "" ? null : n} />
                <Operator val={operator} />

                {/* NUMBERS */}
                    <p data-n="1" onClick={this.displayNumber}>1</p>
                    <p data-n="2" onClick={this.displayNumber}>2</p>
                    <p data-n="3" onClick={this.displayNumber}>3</p>

                {/* OPERATORS */}
                    <p data-sign="+" onClick={this.getOperator}>+</p>
                    <p data-sign="-" onClick={this.getOperator}>-</p>
                    <p data-sign="/" onClick={this.getOperator}>/</p>
                    <p data-sign="*" onClick={this.getOperator}>*</p>
                    <p onClick={this.getTotal}>equal</p>
                    <p onClick={this.deleteNumber}>clear</p>
            </div>
        )
    }
}
   
export default Calculator
import React,{Component}来自“React”
从“./Container”导入显示
从“./Container”导入运算符
从“/../util”导入{selectOperator}
类计算器扩展组件{
建造师(道具){
超级(道具)
此.state={
值1:“”,
值2:“”
}
}
displayNumber=e=>{
const{getNumber,resetResult,getOperator}=this.props
getNumber(parseInt(e.target.dataset.n))
}
getOperator=e=>{
const{getOperator,n,resetResult,resetOperator}=this.props
重置运算符()
getOperator(e.target.dataset.sign)
如果(this.state.val1==“”){
这是我的国家({
瓦尔1:n
})
resetResult()
}
}
getSum=val=>{
val.reduce((acc,val)=>acc+val)
}
deleteNumber=()=>{
const{clearNumber}=this.props
clearNumber()
}
getTotal=()=>{
常量{n,运算符,resetResult}=this.props,
{val1,val2}=this.state,
value1=此.getSum(val1),
value2=val2!=“this.getSum(val2):null;
let operatorVal=运算符[0]
this.setState({val2:n})
resetResult()
选择Operator(operatorVal、value1、value2)
}
render(){
const{n,operator,getNumber}=this.props
返回(
{/*数字*/}

1

2

3

{/*运算符*/}

+

-

/

*

相等

清除

) } }   导出默认计算器
它实际上是从数组中删除最后一个元素(就像在计算器上有一个clear函数一样)

我得到的错误是当数组中还有一个项目时:


这很好,但是如果数组是空的呢
pop
将返回
undefined
从而返回错误

case 'CLEAR_NUMBER':
     return [
      ...state
    ].pop()
编辑:

case 'CLEAR_NUMBER': {
  if(state.length > 0) {
    return [
      ...state
    ].pop()
  }

  return state;
}

pop
返回删除的元素,而不是修改的数组

你需要做什么

const newState = [...state];
newState.pop();
return newState;

或者,使用
返回状态.slice(0,-1)
您应该这样使用以避免此类错误:

case 'CLEAR_NUMBER':
  if ([...state].length > 1) {
    return [...state].pop()
  }
  return [] // or return null, but not undefined ie. no explicit return

不完全是这样,我得到的错误,即使在有一个数字在左边的array@Alex你能在编辑中做一个简单的检查吗?顺便说一句,pop返回数组中的最后一个元素,不确定您是否知道。@Alex这对state有效。长度>=2?它会将您的状态从数组更改为元素。。。