为什么吸气剂不返回值

时间:2018-11-23 06:13:29

标签: javascript vue.js vuex vuex-modules

我有一个吸气剂,它返回对象数组。问题在于我需要在不同的组件中使用过去和实际的警告。

它仅返回实际警告并忽略过去。但是,当我删除map方法时,它可以正常工作。

P.S我试图将此吸气剂分成两个吸气剂

getPastOrActualWarnings: state => type => {
    const now = +new Date()
    let warnings
    if (type === 'actual') {
        warnings = state.warnings.filter(item => item.time * UNIX_TIMESTAMP > now)
    } else if (type === 'past') {
        warnings = state.warnings.filter(item => item.time * UNIX_TIMESTAMP < now)
    } else {
        warnings = []
    }

    return warnings.map(dateToString)
}

function dateToString (item) {
    item.time = new Date(item.time * UNIX_TIMESTAMP).toLocaleDateString('ru-RU', DATE_OPTIONS)
    return item
}

1 个答案:

答案 0 :(得分:0)

问题是您正在直接使用getter修改状态,这是您绝对不应该做的事情。以下行修改了item.time,您之前曾用它对项目进行排序。 item是对状态中存储的对象的引用。

item.time = new Date(item.time * UNIX_TIMESTAMP).toLocaleDateString('ru-RU', DATE_OPTIONS)

要解决此问题,您可以执行以下两项操作之一:

  • 使用其他名称作为渲染时间

    item.renderedTime = new Date(item.time * UNIX_TIMESTAMP).toLocaleDateString('ru-RU', DATE_OPTIONS)
    
  • (浅)复制该项目,以便您修改本地副本,而不是处于状态的副本

    function dateToString(item) {
      const localItem = { ...item };
      localItem.time = new Date(item.time * UNIX_TIMESTAMP).toLocaleDateString(
        "ru-RU"
      );
      return localItem;
    }