Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React/Redux-从mapStateToProps发出迭代json_Json_Ajax_Redux - Fatal编程技术网

React/Redux-从mapStateToProps发出迭代json

React/Redux-从mapStateToProps发出迭代json,json,ajax,redux,Json,Ajax,Redux,我有一个React本机应用程序,我正在尝试应用Redux。这是我第一次尝试使用Redux,所以我想我没有在房间里看到大象 问题是我无法访问我的道具数据(使用mapStateToProps生成)。这是我的密码: reducer.js(在控制台日志中,我可以很好地看到json对象) component.js(在console.log中,我看到了我的数据,但现在它似乎都在一个对象中,这可能是我没有看到的) reducers/index.js import { combineReducers } fro

我有一个React本机应用程序,我正在尝试应用Redux。这是我第一次尝试使用Redux,所以我想我没有在房间里看到大象

问题是我无法访问我的道具数据(使用mapStateToProps生成)。这是我的密码:

reducer.js(在控制台日志中,我可以很好地看到json对象)

component.js(在console.log中,我看到了我的数据,但现在它似乎都在一个对象中,这可能是我没有看到的)

reducers/index.js

import { combineReducers } from 'redux';
import DataReducer from './DataReducer';

export default combineReducers({
  etiquetas: DataReducer
});
因此,我的问题是:

  • 为什么总是返回未定义? this.props.etiquetas.length==0
  • 为什么mapStateToProps似乎将我的对象数组转换为单个对象?这就是我必须在控制台日志中使用JSON.stringify的原因吗
  • 最后,如何访问组件中的数据

  • 提前谢谢你

    这里的问题就是你构造减速器的方式

    const INITIAL_STATE = {
      etiquetas: []
    };
    
    上面的代码表示您正在创建一个对象,其属性名为“etiquetas”,最初包含一个空数组

    在根reducer文件中,导入该对象,并将其命名为“etiquetas”。因此,减速机真正返回的是:

    etiquetas: {
      etiquetas: [your array of data]
    }
    
    这可以解释为什么你抱怨收到了一个物体。有两种方法可以纠正这种情况

    One:将mapStateToProps函数更改为:

    const mapStateToProps = (state) => {
      return {
        etiquetas: state.etiquetas.etiquetas
      };
    };
    
    两个:将减速器换成这样

    export default (state = [], action) => {
      switch (action.type) {
        case FETCH_ETIQUETAS_SUCCESS:
          //console.log("payload: "+action.payload);
          return action.payload;
        default:
          return state;
      }
    };
    

    这将确保reducer只返回一个数组,而不是在属性中包含数组的对象。由您决定您更喜欢哪一个。

    您确定action.payload是array而不是json吗?不确定为什么不发布您试图调试的代码的实际重要部分。我们可以看到您的action/action creator对某些数据执行类似于AJAX的请求吗?另外,您可以向我们展示您的root reducer文件的外观吗like@DanielZuzevich刚刚添加了操作文件和reducer根目录,在MapStateTrops函数中,将其更新为,etiquetas:state.etiquetas.etiquetas和re fresh,如果有任何变化,请告诉我。非常感谢!我选择了1号,工作得很好:)
    etiquetas: {
      etiquetas: [your array of data]
    }
    
    const mapStateToProps = (state) => {
      return {
        etiquetas: state.etiquetas.etiquetas
      };
    };
    
    export default (state = [], action) => {
      switch (action.type) {
        case FETCH_ETIQUETAS_SUCCESS:
          //console.log("payload: "+action.payload);
          return action.payload;
        default:
          return state;
      }
    };