react-native - React Native:等到动作完成并且reducers设置状态
问题描述
我是新来的反应本机并使用 redux 进行状态管理的新手。我的组件不会等到减速器设置状态并返回初始状态。这导致没有数据的空对象。
这是我的组件
function SingleProject({ route, getSingleProject, data: { singleProject } }) {
useEffect(() => {
getSingleProject(route.params.itemId);
}, [getSingleProject, route.params.itemId]);
return (
<Container>
<Text>{singleProject && singleProject.data.name}</Text>
</Container>
);
}
SingleProject.propTypes = {
getSingleProject: PropTypes.func.isRequired,
};
const mapStateToProp = (state) => ({
data: state.project,
});
export default connect(mapStateToProp, { getSingleProject })(SingleProject);
这是我的行动
export const getSingleProject = (id) => async (dispatch) => {
const config = {
headers: {
Authorization: await AsyncStorage.getItem("token"),
},
};
await axios
.get(`${API_URL}/project/single/${id}`, config)
.then((res) => {
dispatch({
type: GET_SINGLE_PROJECT,
payload: res.data,
});
})
.catch((err) => {
dispatch({
type: GET_SINGLE_PROJECT_ERROR,
payload: err,
});
});
};
这是我的减速机
const initiaState = {
data: null,
singleProject: {},
loading: true,
error: "",
};
export default function (state = initiaState, actions) {
const { type, payload } = actions;
switch (type) {
case GET_SINGLE_PROJECT:
return {
...state,
singleProject: payload,
loading: false,
};
default:
return state;
}
}
所以基本上我希望我的组件等到状态更新。我使用了 mapStateToprop 函数,但我不知道为什么它不起作用。谢谢。
解决方案
您同时使用 async/await 和 Promise(.then) 。这可能是问题所在。尝试删除异步/等待。
export const getSingleProject = (id) => (dispatch) => {
const config = {
headers: {
Authorization: await AsyncStorage.getItem("token"),
},
};
axios
.get(`${API_URL}/project/single/${id}`, config)
.then((res) => {
dispatch({
type: GET_SINGLE_PROJECT,
payload: res.data,
});
})
.catch((err) => {
dispatch({
type: GET_SINGLE_PROJECT_ERROR,
payload: err,
});
});
};
推荐阅读
- python - Python 列表列表作为字典值
- ios - 断言当前线程是主线程的单元测试 [iOS]
- database - 无法远程连接到 postgres 服务器(ubuntu 16.04)
- javascript - APM 标头内容包含无效字符
- java - 将单个对象和对象列表合并到Java中的单个对象列表中
- listview - 如何在 react-native ListItem 中将 V 形图标向左移动
- squarespace - 在 Squarespace 中使用主动俱乐部解决方案
- android - 明年 2019 年我还能使用 gradle plugin 2.30 吗?
- hyperledger-fabric - hyperledger peeradmincard 创建错误?任何解决方案
- google-apps-script - 如何保护工作表然后取消保护特定单元格