【发布时间】:2020-01-16 11:33:16
【问题描述】:
我遇到了一个问题,我似乎找不到我犯的错误。我基本上有一个简单的 redux-thunk 动作创建器,其中包含一些 axios 调用。我使用connect 将我的组件连接到这个动作创建者,然后在一个异步方法中调用它,该方法被传递给TouchablyOpacity onPress 属性。
简化代码:
动作创建者:
export const createUploadEntry = (
step,
image,
base64,
width,
height,
submissionEntry
) => async (dispatch, getState) => {
dispatch(createUploadEntryStart());
try {
const response = await axios.put(...);
console.log("finished creating submission entry");
dispatch(createUploadEntrySuccess(response.data));
} catch (error) {
...
}
}
Index.js
import { connect } from "react-redux";
import Component from "./component";
import { createUploadEntry } from "../../../../store/actions/trainings";
export default connect(
null,
{ createUploadEntry }
)(Component);
Component.js
const Test = (props) => {
const onPressed = async () => {
console.log("start awaiting");
await props.createUploadEntry(...);
console.log("finished awaiting");
props.navigateToNext();
}
return <TouchableOpacity onPress={onPressed}>...</TouchableOpacity>
}
然后我在控制台中得到的输出是:
- 开始等待
- 等待完成
- 完成创建提交条目
动作创建者涉及上传图片,因此需要一些时间,并且在“开始等待”之后立即调用“完成等待”。
我希望我已经足够好地描述了我的问题,并提前感谢您的帮助!
干杯
【问题讨论】:
-
createUploadEntry在这里不是异步的,它返回一个异步函数。发送createUploadEntrySuccess后尝试返回resp。 -
@Clarity 不能解决问题。
-
你试过
TouchableHighlight而不是TouchableOpacity吗?我知道这似乎无关,但TouchableOpacity有一些非常讨厌的错误,只能在非常特定的环境下复制,您的可能会受到它的影响。 -
@CanPoyrazoğlu 还没有想到这一点,我会尝试一下,然后再找你!感谢您的意见!
-
@CanPoyrazoğlu 不幸的是似乎没有什么不同
标签: react-native redux react-redux redux-thunk