Javascript 反应空对象
我的react应用程序有一些问题。 我想获取一些数据,但它总是检索空对象 这是我的app.jsJavascript 反应空对象,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
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
数组,是吗?