#reactjs #post #redux #components
#reactjs #Публикация #сокращение #Компоненты
Вопрос:
Я пытаюсь показать данные из объекта в запросе POST, но когда я пытаюсь показать данные в моем компоненте, я получаю эту ошибку:
‘Ошибка типа: patito не определено’
Я отслеживаю все данные, и с массивом все в порядке, поэтому я не знаю, из-за чего я получаю ошибку.
ConfigStore.js
import { ReduceStore } from 'flux/utils';
import ActionTypes from '../constants/AppConstants';
import AppDispatcher from '../dispatcher/AppDispatcher';
import config from '../../config';
class ConfigStore extends ReduceStore {
getInitialState() {
return {
language: config.SiteConfig.defaultLanguage,
languageLabels: {},
races: [],
tracks:{}
};
}
reduce(state, action) {
switch (action.type) {
case ActionTypes.GET_TRACK:
var newState = Object.assign({}, state);
newState.tracks = action.data;
return newState;
case ActionTypes.GET_RACE:
var newState = Object.assign({}, state);
newState.races = action.data;
return newState;
default:
return state;
}
}
}
export default new ConfigStore(AppDispatcher);
trackUtils.js
import AppDispatcher from '../dispatcher/AppDispatcher';
import ActionTypes from '../constants/AppConstants';
import ConfigStore from '../stores/ConfigStore';
import config from '../../config';
import axios from 'axios';
class trackUtil {
constructor() {
this.serverConfig = config.ServiceConfig;
this.baseURL = this.serverConfig.url ':' this.serverConfig.port '/';
this.appConfig = config.AppConfig;
}
trackRequest(data) {
const url = this.baseURL 'BusRace/GetActiveTracksDate';
const requestJSON = {
DGSReq: {
InParams: {
LogonSessionID: 17629,
ProfileID: 1,
RaceDate: "03/20/2019",
UIType: 1
}
}
};
axios.post(url, requestJSON)
.then((response ) => {
AppDispatcher.dispatch({
type: ActionTypes.GET_TRACK,
data: {...response.data.DGSResp}
});
console.log(response.data.DGSResp);
})
.catch((error) => {
console.log(error);
});
};
}
export default new trackUtil();
trackjs (компонент)
import React, { Component } from 'react';
import { Container } from 'flux/utils';
import ConfigStore from '../stores/ConfigStore';
import ActionTypes from '../constants/AppConstants';
import ActionCreators from "../actions/ActionCreators";
import { Redirect } from 'react-router-dom';
class Body extends Component {
static getStores() {
return [ConfigStore];
};
static calculateState() {
let configData = ConfigStore.getState();
return {
configInfo: configData
};
};
componentDidMount() {
const params = {...this.state, ...{actionType: ActionTypes.GET_TRACK}};
ActionCreators.actionTrigger(params);
}
render() {
const patito= this.state.configInfo.tracks.TrackList;
console.log(patito);
let i = 0;
for(i; i<patito.List.length; i ) {
return(
<div className="post card" key={patito.track-name}>
</div>
);
}
}
}
export default Container.create(Body);
Надеюсь, кто-нибудь сможет мне помочь, у меня около 2 дней с этой ошибкой.
Ответ №1:
где вы определили состояние вашего компонента? Я не нашел подсказки о состоянии в вашем компоненте. Кроме того, объект configStore, к которому вы пытаетесь получить доступ через this.state
, будет недоступен до тех пор, пока вы не обновите свое состояние с помощью setState
или инициализации state. Кроме того, я предложу использовать перехват жизненного цикла react componentWillReceiveProps
для обновления состояния вашего компонента. это может вам помочь.
class Body extends Component {
constructor() {
this.state={
configInfo: {}
}
}
static getStores() {
return [ConfigStore];
};
static calculateState() {
let configData = ConfigStore.getState();
this.setState({configInfo: configData});
return {
configInfo: configData
};
};
componentDidMount() {
const params = {...this.state, ...{actionType: ActionTypes.GET_TRACK}};
ActionCreators.actionTrigger(params);
}
render() {
const patito= this.state.configInfo.tracks.TrackList;
console.log(patito);
let i = 0;
for(i; i<patito.List.length; i ) {
return(
<div className="post card" key={patito.track-name}>
</div>
);
}
}
}
Комментарии:
1. извините, но я не знаю, как это сделать : /, не могли бы вы, пожалуйста, привести краткий пример?
2. componentWillReceiveProps помечен как НЕБЕЗОПАСНЫЙ, и лучше его больше не использовать 🙂