我在redux调度中遇到奇怪的行为。对于分派功能res未定义,但是对于控制台日志,该功能调用res上方的一行已正确记录。任何想法为什么会这样?
主要动作
export const uploadFiles = (files: File[], artworkId: string, fileType: string) => (
(dispatch: Dispatch) => {
files.forEach(file => {
axios.post(
`${my-api-route}, convertToFormDataFile(file, fileType))
.then(res => {
console.log(res.data.data.id) //works
dispatch(uploadFileLimitedEditionSuccess(res.data.data.id, file, fileType))
}) //does not work
.catch(err => dispatch(uploadFileLimitedEditionFailure(err.response.data.errors[fileType === 'pdf' ? 'pdf' : 'file'], file.name, fileType)))
})
}
);
成功动作
const uploadFileLimitedEditionSuccess = (id: any, file: File, fileType: string):LimitedEditionActionType => ({
type: LIMITED_EDITIONS_UPLOAD_FILE_SUCCESS,
payload: {
id,
file,
fileType
}
});
如果对象引用丢失,则只需传递值。另外,检查传递给dispatch
的值-它必须是一个对象(请参见https://redux.js.org/api/store/#dispatchaction)
export const uploadFiles = (files: File[], artworkId: string, fileType: string) => (
(dispatch: Dispatch) => {
files.forEach(file => {
axios.post(
`${my-api-route}, convertToFormDataFile(file, fileType))
.then(res => {
console.log('I got called!)
console.log(res)
console.log(res.data.data.id) //works
const id = res.data.data.id
const toDispatch = uploadFileLimitedEditionSuccess(id, file, fileType)
console.log(toDispatch)
dispatch(toDispatch)
}) //does not work
.catch(err => {
console.log(err)
dispatch(uploadFileLimitedEditionFailure(err.response.data.errors[fileType === 'pdf' ? 'pdf' : 'file'], file.name, fileType))
})
})
}
);