1

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

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

PS我试图把这个吸气剂分成两个吸气剂

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
}
4

1 回答 1

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;
    }
    
于 2018-11-23T09:17:39.593 回答