reactjs - 使用 Redux 的 useEffect 竞争条件
问题描述
您好,我在安装组件时一直在努力设置值。我正在使用 useEffect Hook 和 useDispatch、useSelector 来调用方法并从商店获取状态。问题是来自商店的状态延迟了 1 次渲染,因此我需要运行两次 useEffect 中的代码才能获得我期望的行为。这是 -> 当组件加载时,进行 API 调用并列出一些文档。
数据声明
const data = useSelector(state => state.whole.manufactured);
使用效果代码
useEffect(() => {
if (counter <= 1) {
fetchData();
setProducts(data);
setCounter(counter + 1);
}
console.log('data in store', data);
console.log('useEffect');
}, [clickedItem, data]);
获取数据函数
const fetchData = async () => {
await dispatch(get_manufacturing());
};
获取制造
return dispatch => {
dispatch(Actions.uiStartLoading());
fetch('http://myapi/api/product/get-products', {
method: 'GET',
headers: Interceptor.getHeaders(),
})
.then(res => res.json())
.then(result => {
dispatch(Actions.uiStopLoading());
if (result.status === true) {
dispatch({type: TYPES.GET_MANUFACTURABLE, data: data});
}
})
.catch(error => {
dispatch(Actions.uiStopLoading());
console.log(error);
});
正如您在第一次渲染中看到的,它似乎完全忽略了 fetchData() 并继续到 console.log,在第二次渲染之后,值已正确设置。我该如何解决这个问题,是否有一些我没有正确完成的事情?
解决方案
clickedItem
在依赖项列表中替换为counter
.
推荐阅读
- javascript - 如何使用 Javascript 在 div 中的文本之间创建可点击的跨度
- r - 在 R 中进行身份验证的 API POST
- reactjs - 多选的标签被输入字段的轮廓划掉
- angular - 子模块的角度合并路线
- c++ - 类类型的“不允许不完整类型”数组
- java - 将 Json.jar 导入一个简单的 Java 项目
- reactjs - 使用 Github Pages 创建主页
- excel - 使用 VBA 清理 Excel 表格而不影响整个表格和格式
- ruby - 使用 Shrine 提取背景中的图像尺寸
- angular-cli - Angular 应用程序安装错误:在“...//registry.npmjs.org/”附近解析时 JSON 输入意外结束