首页 > 解决方案 > 对 mapStateToProps 感到困惑

问题描述

我正在尝试让 redux 与我的应用程序一起正常工作。它似乎在某种程度上起作用。但是,当返回数据时,渲染函数似乎没有更新。

在尝试对此进行测试时,我做了以下事情:

const mapStateToProps = (state, ownProps) => {
        console.log(state.correct_property_name)
        console.log(state)
    return {
        data: state.correct_property_name
    };
};

在这种情况下,console.log forcorrect_data_name返回一个空数组:[]。调度似乎根本没有被调用。

但是,如果我将上面代码中的最后一行更改为具有不正确的属性名称,console.log 确实可以工作,调用 dispatch,但我的渲染函数不会重新加载:

const mapStateToProps = (state, ownProps) => {
        console.log(state.correct_property_name)
        console.log(state)
    return {
        data: state.wrong_property_name
    };
};

问题:

为什么将最后一行更改为错误的属性名称会突然导致 console.log 显示数据?

如果有用的话,这里是文件中的剩余行:

const mapDispatchToProps = (dispatch, ownProps) => ({
    fetchData() {
        dispatch(mySpecialActions.fetchMySpecialData());
    }
});

export default connect(mapStateToProps, mapDispatchToProps)(MyClassName);

行动:

import Axios from 'axios';

const apiUrl = '/api/my_data/';
export const fetchMySpecialDataSuccess = (correct_property_name) => {
  return {
    type: 'FETCH_MY_SPECIAL_DATA_SUCCESS',
    correct_property_name
  }
};


export const fetchMySpecialData = () => {

  console.log("TEST ONE")
  return (dispatch) => {
        console.log("DISPATCH")
    return Axios.get(apiUrl)
      .then(response => {
        console.log("DATA")

        dispatch(fetchMySpecialDataSuccess(response.data))
      })
      .catch(error => {
        console.log("ERROR")
        console.log(error)
        throw(error);
      });
  };
};

仅当我将主文件中的最后一行设置为 . 时,才会显示操作文件中的注释data: state.incorrect_property_name。对我来说,这意味着当我指定正确的属性名称时它甚至没有调用该操作。但是当我指定一个假的属性名称时会调用该操作。

减速器:

import * as actionTypes from '../actions/actionTypes'

export const mySpecialDataReducer = (state = [], action) => {
  switch (action.type) {
    case actionTypes.FETCH_MY_SPECIAL_DATA_SUCCESS:
          return action.correct_property_name;
    default:
        console.log("DEFAULT STATE")
          return state;
  }
};

标签: reactjsreduxredux-thunk

解决方案


推荐阅读