#javascript #reactjs #react-redux #httprequest
#javascript #reactjs #react-redux #httprequest
Вопрос:
Я пытаюсь загрузить данные, полученные из запроса GET, в виде файла .txt, но я продолжаю получать «undefined» в качестве содержимого загруженного файла. Мне нужна только часть данных ответа. Ниже приведен пример ответа, а также мое действие redux, reducer и моя функция экспорта My action:
export const previewLodgements = (id) => (dispatch) => {
const accessToken = JSON.parse(localStorage.getItem('greenpole_redux_state'));
dispatch({ type: certificateConstant.PREVIEW_CERTIFICATE_PROGRESS });
fetch(`${urlConstants.CERTIFICATE_BASE_URL}certificate/lodge/preview/${id}`, {
method: 'GET',
headers: {
Authorization: `Bearer ${accessToken.auth.token}`,
},
})
.then((res) => res.json())
.then((query) => {
if (query.status === '00') {
dispatch({
payload: query.data,
type: certificateConstant.PREVIEW_CERTIFICATE_SUCCESS,
message: 'Preview successful',
});
} else {
dispatch({
payload: query.data,
type: certificateConstant.PREVIEW_CERTIFICATE_FAILURE,
message: query.statusMessage,
});
}
})
.catch((error) => {
dispatch({
payload: null,
type: certificateConstant.PREVIEW_CERTIFICATE_FAILURE,
message: 'unable to preview lodgements',
});
});
};
мой редуктор:
import { certificateConstant } from '../../lib/constants/certificateConstants';
const initialState = {
loading: false,
previewLodgement: '',
};
const certificateReducer = (state = initialState, action) => {
switch (action.type) {
case certificateConstant.PREVIEW_CERTIFICATE_PROGRESS:
return {
status: action.status,
message: action.message,
loading: true,
};
case certificateConstant.PREVIEW_CERTIFICATE_SUCCESS:
return {
...state,
previewLodgement: action.payload,
status: action.status,
message: action.message,
loading: false,
};
case certificateConstant.PREVIEW_LODGEMENT_FAILURE:
return {
...state,
previewLodgement: action.payload,
status: action.status,
message: action.message,
loading: false,
};
default:
return state;
}
};
export default certificateReducer;
моя функция загрузки:
const previewLodgement = useSelector(
(state) => state.certificateReducer.previewLodgement,
);
const handleExport = () => {
let id = selectedLodgements[0];
if (validateCheck()) {
dispatch(previewLodgements(id));
var a = document.createElement('a');
var file = new Blob([previewLodgement], { type: 'text/plain' });
a.href = URL.createObjectURL(file);
a.download = 'lodgement.txt';
document.body.appendChild(a);
a.click();
}
};
ответ, полученный с сервера после вызова API:
{
"status": "00",
"statusMessage": "",
"data": "Title: Certificate Lodgement 1nControl Number: 847834783748738nDate Lodged: 2020-12-27 00:00:00.0nStatus: Not TreatednnCertificatesn==============nnCertificate Number: 1324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Andrew EfurhievwenHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: 2111389645nOld Holder Arp Account Number: nIssuing Company: Duff Beernchn: 123456789nclaimed: YesnnCertificate Number: 1324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Andrew EfurhievwenHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: 2111389645nOld Holder Arp Account Number: nIssuing Company: Africa Prudentialnchn: nclaimed: YesnnCertificate Number: 2324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Lisa SimpsonnHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: PeternOld Holder Arp Account Number: nIssuing Company: Duff Beernchn: nclaimed: Yesnn",
"date": 1609925003880
}
Я пытаюсь загрузить только строку в «data» в виде текстового файла
Комментарии:
1. каков результат console.log (запроса)?
2. Ответ совпадает с ответом, полученным от сервера после вызова API. Я привел пример выше. Это последний блок кода
Ответ №1:
Вы передаете query.data
свой редуктор в качестве полезной нагрузки, затем (на вашем редукторе) ваш action.payload
становится:
"Title: Certificate Lodgement 1nControl Number: 847834783748738nDate Lodged: 2020-12-27 00:00:00.0nStatus: Not TreatednnCertificatesn==============nnCertificate Number: 1324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Andrew EfurhievwenHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: 2111389645nOld Holder Arp Account Number: nIssuing Company: Duff Beernchn: 123456789nclaimed: YesnnCertificate Number: 1324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Andrew EfurhievwenHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: 2111389645nOld Holder Arp Account Number: nIssuing Company: Africa Prudentialnchn: nclaimed: YesnnCertificate Number: 2324354565656565nOld Certificate Number: nVolume Of Bonds: 400nIssue Date: 2020-09-30 00:00:00.0nHolder Name: Lisa SimpsonnHolder Address: 12, SpringfieldnHolder Email: nizyvi@getnada.comnHolder Cscs Account Number: 7647637467463746nOld Holder Cscs Account Number: nHolder Arp Account Number: PeternOld Holder Arp Account Number: nIssuing Company: Duff Beernchn: nclaimed: Yesnn"
action.status
для вашего объекта action нет свойства (вот почему вы получаете undefined), только одно свойство называется payload со строкой в качестве значения.
В вашем редукторе попробуйте войти action.payload
в систему, и вам станет все ясно.