如何在React Redux中获得状态的先前值

时间:2018-08-15 03:42:25

标签: javascript reactjs ecmascript-6 redux react-redux

我有这个reducer

import { FETCH_WEATHER } from "../actions/index";

export default function(state = [], action) {
  switch (action.type) {
    case FETCH_WEATHER:
      console.log(state)
      return [action.payload.data,...state];
    default:
      return state
  }
}

但是每当我console.log state时,结果总是undefined

这是我的action

import axios from 'axios';

const API_KEY = '...';
const ROOT_URL = `...`
export const FETCH_WEATHER = 'FETCH_WEATHER';

export function fetchWeather(city){
  const url = `${ROOT_URL}&q=${city},us`;
  const request = axios.get(url)
  return {
    type : FETCH_WEATHER,
    payload: request,
  }
}

我正在考虑创建一个常量以保存数据的整体并将其传递给reducer,但我认为这不是正确的方法。

问题: 如何访问化简器中的先前状态,以便每当console.log时都有一个值。

这是代码codesandbox

1 个答案:

答案 0 :(得分:1)

先前的状态存储在您的state变量中,如您的化简中所定义。因此,可以通过state变量在化简器中访问先前状态。

您似乎有一个块语法错误,可能会导致您遇到问题(请参见下面的更正)。

此外,如果要在运行化简器时将以前的状态记录到控制台,请考虑在化简器的开头放置对console.log的调用:

import { FETCH_WEATHER } from "../actions/index";

export default function(state = [], action) {

  // console.log(state) // Add this to log previous state for every call to reducer

  switch (action.type) {

    case FETCH_WEATHER: { // Added { here

      console.log(state)
      return [action.payload.data,...state];

    } // Added } here

    default:
      return state
  }
}