В моем приложении response / redux всякий раз, когда я передаю данные формы в POST
api, я получаю сообщение об ошибке
Необработанное отклонение (TypeError): невозможно прочитать данные свойства undefined /
Данные по-прежнему отправляются на сервер Django, поскольку, когда я проверяю данные на своем сервере, я могу подтвердить, что данные, которые я ввел в форму, были отправлены и сохранены. Однако я думаю, что это интерфейс, в котором есть ошибка. Что мне не хватает?
Форма компонент
class FormInvoice extends Component {
state = {
invoiceOwner: "",
product: "",
quantity: "",
mode: "",
status: "",
payment_made: "",
};
static propTypes = {
addInvoiceData: PropTypes.func.isRequired,
};
onChange = (e) =>
this.setState({
[e.target.name]: e.target.value,
});
onSubmit = (e) => {
e.preventDefault();
const {
invoiceOwner,
product,
quantity,
mode,
status,
payment_made,
} = this.state;
const invoice = {
invoiceOwner,
product,
quantity,
mode,
status,
payment_made,
};
this.props.addInvoiceData(invoice); <=== Action for passing data to POST api
};
render() {
const {
invoiceOwner,
product,
quantity,
mode,
status,
payment_made,
} = this.state;
return (
<div className="App container">
<Modal isOpen={this.props.newInvoiceModal} scrollable={true}>
<ModalHeader toggle={this.props.toggleModal}>Add Invoice</ModalHeader>
<ModalBody>
<FormGroup>
<Label for="title">Name</Label>
<Input
name="invoiceOwner"
value={invoiceOwner}
onChange={this.onChange}
/>
</FormGroup>
<FormGroup>
<Label for="title">Product</Label>
<Input name="product" value={product} onChange={this.onChange} />
</FormGroup>
<FormGroup>
<Label for="title">Quantity</Label>
<Input
name="quantity"
value={quantity}
onChange={this.onChange}
/>
</FormGroup>
<FormGroup>
<Label for="title">Mode</Label>
<Input name="mode" value={mode} onChange={this.onChange} />
</FormGroup>
<FormGroup>
<Label for="title">Status</Label>
<Input name="status" value={status} onChange={this.onChange} />
</FormGroup>
<FormGroup>
<Label for="title">Paid</Label>
<Input
name="payment_made"
value={payment_made}
onChange={this.onChange}
/>
</FormGroup>
</ModalBody>
<ModalFooter>
<button onClick={this.onSubmit} className="btn btn-primary">
Submit
</button>{" "}
<Button color="secondary" onClick={this.props.toggleModal}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
}
}
export default connect(null, { addInvoiceData })(FormInvoice);
Redux часть
// API
const api = Axios.create({
baseURL: "http://localhost:8000/api",
timeout: 30000,
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
},
});
api.interceptors.request.use(
(config) => {
if (localStorage.getItem("access")) {
config.headers.Authorization = `JWT ${localStorage.getItem("access")}`;
}
return config;
},
(error) => Promise.reject(error)
);
export default api;
// ADD INVOICE DATA
import API from "../api"
export const addInvoiceData = (invoice) => async (dispatch) => {
await API.post("/clients/invoice/", invoice)
.then((res) => {
dispatch(createMessage({ addInvoiceData: "Invoice detail added" }));
dispatch({
type: ADD_INVOICE_DATA,
payload: res.data,
});
dispatch({
type: TOGGLE_MODAL,
});
})
.catch((err) =>
dispatch(returnErrors(err.response.data, err.response.status))
);
};
//Reducer
const initialState = {
invoiceData: [],
newInvoiceModal: false,
};
export default function (state = initialState, action) {
switch (action.type) {
case GET_INVOICE_DATA:
return {
...state,
invoiceData: action.payload,
};
case ADD_INVOICE_DATA:
return {
...state,
invoiceData: action.payload,
};
}
}