Javascript 反应空对象

Javascript 反应空对象,javascript,reactjs,axios,Javascript,Reactjs,Axios,我的react应用程序有一些问题。 我想获取一些数据,但它总是检索空对象 这是我的app.js import React, { Component } from 'react'; import { connect } from 'react-redux'; import { setSearchField, requestRobots } from '../../appRedux/actions'; const mapStateToProps = (state) => { retur

我的react应用程序有一些问题。 我想获取一些数据,但它总是检索空对象

这是我的app.js

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { setSearchField, requestRobots } from '../../appRedux/actions';


const mapStateToProps = (state) => {
  return {
    searchField: state.searchRobots.searchField,
    games: state.requestRobots,
    isPending: state.requestRobots.isPending
  }
}

const mapDispatchToProps = (dispatch) => {
  return {
    onSearchChange: (event) => dispatch(setSearchField(event.target.value)),
    onRequestRobots: () => dispatch(requestRobots())
  }
}

class App extends Component {
  componentDidMount() {
    this.props.onRequestRobots();
  }

  render() {
    const { games, searchField, onSearchChange, isPending } = this.props;

    console.log("here it is" + games);



    return (
      <div className='tc'>
        <h1 className='f1'>RoboFriends</h1>
        <SearchBox searchChange={onSearchChange}/>

      </div>
    );
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(App)
看到我有
console.log(“游戏数据:”,数据)我成功地获得了我需要的信息?
后端响应是这样的:

import {
    CHANGE_SEARCHFIELD,
    REQUEST_ROBOTS_PENDING,
    REQUEST_ROBOTS_SUCCESS,
    REQUEST_ROBOTS_FAILED,
  } from "../../constants/ActionTypes";
  import axios from 'util/Api'


  export const setSearchField = (text) => ({ type: CHANGE_SEARCHFIELD, payload: text })


  export const requestRobots = () => {
    return (dispatch) => {
      dispatch({ type: REQUEST_ROBOTS_PENDING });
      axios.post('/games',
      ).then(({ data }) => {
        console.log("Games data: ", data);
        if (data.result) {
          dispatch({ type: REQUEST_ROBOTS_SUCCESS, payload: data });
        } else {
          dispatch({ type: REQUEST_ROBOTS_FAILED, payload: data.error });
        }
      }).catch(function (error) {
        dispatch({ type: REQUEST_ROBOTS_FAILED, payload: error.message });
        console.log("Error****:", error.message);
      });
    }
  };
{
    "result": true,
    "games": [
        {
            "id": 1,
            "panelgameid": 71,
            "img": "https://cdn.wallpapersafari.com/67/50/EkSo4r.jpg",
            "name": "Counter-Strike 1.6",
            "active": 1,
            "minslots": 12,
            "maxslots": 32,
            "slotincreament": 2,
            "order": 1,
            "prices": [
                {
                    "id": 1,
                    "gameid": 1,
                    "location": "Serbia",
                    "price": 0.6
                },
                {
                    "id": 2,
                    "gameid": 1,
                    "location": "Germany",
                    "price": 0.4
                }
            ]
        }
}
重复部分

import {CHANGE_SEARCHFIELD, REQUEST_ROBOTS_PENDING, REQUEST_ROBOTS_SUCCESS, REQUEST_ROBOTS_FAILED} from '../../constants/ActionTypes'

const initialStateSearch = {
    searchField: ''
  }

  export const searchRobots = (state=initialStateSearch, action={}) => {
    switch (action.type) {
      case CHANGE_SEARCHFIELD:
        return Object.assign({}, state, {searchField: action.payload})
      default:
        return state
    }
  }

  const initialStateRobots = {
    robots: [],
    isPending: true
  }

  export const requestRobots = (state=initialStateRobots, action={}) => {
    switch (action.type) {
      case REQUEST_ROBOTS_PENDING:
        return Object.assign({}, state, {isPending: true})
      case REQUEST_ROBOTS_SUCCESS:
        return Object.assign({}, state, {robots: action.payload, isPending: false})
      case REQUEST_ROBOTS_FAILED:
        return Object.assign({}, state, {error: action.payload})
      default:
        return state
    }
  }

MapStateTrops
中,您正在将
状态.requestRobots
分配给
游戏
,但您的状态包含
{robots,isPending}
。因此,请尝试将MapStateTrops更改为

const mapStateToProps = (state) => {
  return {
    searchField: state.searchRobots.searchField,
    games: state.requestRobots.robots,
    isPending: state.requestRobots.isPending
  }
}

当您说“始终检索空对象”时,它是一个实际的空对象(即
{}
)还是一个空数组(即
[]
)?它在第一次渲染时可能为空(取决于还原器/初始状态值)。你能分享你的redux reducer吗?它能处理
请求\u机器人\u成功
有效载荷吗?在console.log上(“这里是”+游戏);控制台看起来像是“这里是[object object]”,是的,我将更新postAny想法如何解决?您的
requestRobots
状态片是一个形状为
{robots:any[],isPending:boolean}
的对象。它也不是一个空对象(别相信我,试试
console.log(“这里是”+JSON.stringify(games))
)。假设您正在尝试迭代
robots
数组,是吗?