javascript - 用钩子反应功能组件 - 从用 reducer 编写的函数中获取响应
问题描述
需要帮助才能从写在 reducer 函数中的函数获得响应
功能组件
import {
getAssets,
} from '../../reducers';
const myFunctionalComponent = (props) => {
const dispatch = useDispatch();
const onLinkClick = () => {
dispatch(getAssets());
}
}
return (
<div>
<mainContent />
</div>
)
}
在我的减速机中
const reducer = (state = initialState, action) => {
switch (action.type) {
case ASSETS_LIST: {
return {
...state,
successToast: true,
isLoading: false,
data: action.payload,
};
}
}
export const listsDispactcher = () => dispatch => {
dispatch({ type: SHOW_LOADER });
performGet(ENDPOINT URL)
.then(response => {
debugger;
const payload = response.data;
dispatch({
type: ASSETS_LIST,
payload: {
...payload,
data: payload.results,
},
});
dispatch({ type: HIDE_LOADER });
})
.catch(err => {
dispatch({ type: GET_ASSETS_ERROR, payload: err });
);
});
};
当我单击链接时,我在减速器中调用了我的 api,并在开发人员控制台的 newtwork 选项卡中获取响应,但是如何在我的功能组件中获取响应(即 successToast、data、isLoading)并传递相同的到子组件?
解决方案
我建议您更改项目的结构。将所有网络调用放在一个文件中,然后从您的组件中调用它们。更好的可读性和可理解性
import {
getAssets,
} from './actions';
const myFunctionalComponent = (props) => {
const dispatch = useDispatch();
const onLinkClick = async () => {
const data = await dispatch(getAssets());
}
}
return (
<div>
<mainContent />
</div>
)
}
在 ./actions.js
const getAssets =()=>async dispatch =>{
const res = await axios.get();
dispatch(setYourReduxState(res.data));
return res.data;
}
现在您的组件将获取网络调用的数据。你的 redux 状态也会得到更新
推荐阅读
- xml - 使用 PowerShell 读取 XML 文件并根据条件选择标签
- sql-server - SQL NOT EXISTS 在 OpenQuery 上太慢
- spring - spring-test MockMvc kotlin DSL 缺乏异步支持?
- php - 如何在使用模块化技术时修复引导程序在 layout/index.php 中的 php 文件中不起作用?
- java - 如何检测用户是否通过应用设置从 Facebook 删除应用或更改 Facebook 密码并重新访问应用
- reactjs - 使用 Material-UI 切换过滤器列表
- c# - 访问 Microsoft Graph API 数据的问题
- javascript - 如何从 activedirectory 方法中返回值
- c# - 想要读取一个大文件并立即发送密钥
- python - 如何创建日期时间戳目录并将 OpenCV 制作的文件保存到创建的文件夹中?