Я пытаюсь создать компонент React под названием «Proposals», который будет отображать табличный список информации, полученной от бэкэнда Django.
Я использую компонент Reactable-Search для формирования таблицы, но продолжаю получать ошибка, когда я пытаюсь сопоставить значения this.props.proposals, такие как id и proj_name, с ячейками таблицы - Uncaught TypeError: Невозможно прочитать ячейки свойства undefined
На самом деле не уверен, почему, потому что, когда я отображаю this.props.proposals непосредственно в возвращении рендеринга типичных тегов таблицы html, он работает, то есть отображает данные серверной части в порядке. и я также использовал компонент Reactable-Search с сопоставлением в других случаях, и он работал нормально.
Вывод журнала this.props.proposals также показывает правильный массив объектов ...:
Очень признателен, если кто-то может подтолкнуть меня в правильном направлении, спасибо!
Компонент "Предложения":
import React, { Component } from "react";
import { connect } from "react-redux";
import SearchTable from "reactable-search";
import { proposals } from "../actions";
class Proposals extends Component {
componentDidMount() {
this.props.fetchProposals();
}
constructor(props) {
super(props);
this.state = {};
}
render() {
var rows = this.props.proposals.map(p => ({
selected: this.state.selectedRow === p.id,
onClick: () => {
this.setState({ selectedRow: p.id });
},
cells: {
"#": p.id,
"Project Name": p.proj_name
}
}));
return (
<SearchTable
showExportCSVBtn={true}
searchPrompt="Type to search"
rows={rows}
/>
);
}
}
const mapStateToProps = state => {
return {
proposals: state.proposals
};
};
const mapDispatchToProps = dispatch => {
return {
fetchProposals: () => {
dispatch(proposals.fetchProposals());
}
};
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(Proposals);
Редуктор предложений:
const initialState = [];
export default function proposals(state = initialState, action) {
switch (action.type) {
case "FETCH_PROPOSALS":
return [...action.proposals];
default:
return state;
}
}
Действия предложения
export const fetchProposals = () => {
return dispatch => {
let headers = { "Content-Type": "application/json" };
return fetch("/api/proposals/", { headers })
.then(res => res.json())
.then(proposals => {
return dispatch({
type: "FETCH_PROPOSALS",
proposals
});
});
};
};
initialState
вашегоproposals
редуктора? Попробуйте зарегистрироватьthis.props.proposals
в методеrender
и посмотрите, действительно ли он печатает ожидаемый результат. - person Eugene   schedule 23.01.2019