javascript - 如何从反应组件、react-redux 中的异步函数获取数据?
问题描述
我是 redux 的新手并做出反应。我有从 api 请求调用中获取数据的 React 容器和组件。我的问题基本上是,在反应中处理 redux 的异步函数的最佳方法是什么。我需要帮助来获取反应组件中的数据。
Container.js:(不完整,这里需要帮助)
class Container extends React.Component {
state = {
userList: ''
}
componentDidMount() {
this.props.loadUserDetails();
}
render() {
return (
<div className="app">
<Component userList={this.state.userList}/>
</div>
);
}
}
const mapStateToProps = (state) => ({
userList: state.auth.userList
});
const mapDispatchToProps = (dispatch) => bindActionCreators({
loadUserDetails
}, dispatch);
export default withRouter(connect(
mapStateToProps,
mapDispatchToProps
)(Container));
Componet.js:(纯组件,这里我需要渲染数据)
class Component extends React.Component {
render() {
return (
<div className="component">
{this.props.userList}
</div>
);
}
}
模块/auth/index.js
export const loadUserDetails = () => {
return dispatch => {
dispatch({
type: types.LOAD_USER_REQUEST
});
request.get('/api/v1/auth', dispatch)
.then(({ data }) => {
if (data.success) {
dispatch({
type: types.LOAD_USER_SUCCESS
payload: data.data
});
} else {
dispatch({
type: types.LOAD_USER_FAILURE,
payload: data.message
});
}
})
.catch((err) => {
dispatch({
type: types.LOAD_USER_FAILURE,
payload: 'Something went wrong, please try again.'
});
});
};
};
模块/auth/actions.js:
export const LOAD_USER_REQUEST = 'auth/LOAD_USER_REQUEST';
export const LOAD_USER_SUCCESS = 'auth/LOAD_USER_SUCCESS';
export const LOAD_USER_FAILURE = 'auth/LOAD_USER_FAILURE';
模块/auth/reducers.js:
state ={
loading: false,
error: null,
userList: null
}
case types.LOAD_USER_REQUEST:
return Object.assign({}, state, {
loading: true
});
case types.LOAD_USER_REQUEST:
return Object.assign({}, state, {
loading: false,
userList: payload,
});
case types.LOAD_USER_REQUEST:
return Object.assign({}, state, {
loading: flase,
error: payload
});
我实际上需要帮助来获取 Container 中的 userList 并将其传递给 Component。因为它是一个 asyc 函数,所以我无法在 Component 渲染之前获取 Container 中的数据。如何处理这种情况?
当我传入userList
子组件时,我第一次没有 userList
数据。所以我的问题是 Reactjs 的循环,我应该在哪里打电话loadUserList
?在 componentDidMount? 还是componentDidUpdate?如果是这样,我怎样才能得到数据?
我无法在组件安装时呈现userList
它的值。null
如何解决这个问题?
解决方案
一个不错的选择是使用 redux-saga,实现起来简单简单:
推荐阅读
- docker - 我可以直接部署生成的 docker 镜像而不将其推送到 DockerHub 吗?
- symfony4 - 路径中的前向变量
- javascript - 如何在智能手机浏览器中获取表格 html 的全宽?
- firebase - 如何阻止在firebase中读取子项中的特定字段
- c - 如何以最少的for循环遍历像素块
- swift - 当用户在应用程序中移动时如何继续播放音乐。[不在后台模式下]
- sql - 如何在 jupyter notebook 中的 sqlite3 中对几十年的年份进行分组?
- android - 获取存储在android手机图库中的图像的路径
- css - 如何使子元素的宽度和高度成为其父元素的宽度和高度的最小值
- python - python - 如何在python tkinter中将第一类的输入输入第二类?