javascript - React 中 redux 的异步特性有问题吗?
问题描述
我将数据拉入我的父组件之一,然后使用基于用户从选择框中选择的各种过滤器语句。然后我调用一个操作,它只是将基于用户搜索的过滤数据存储到全局状态,以便我的子组件可以访问它们。
我的一个子组件应该呈现结果,但正在发生的是正在呈现的结果落后于一个动作。我在使用 set state 时遇到了类似的问题,我的解决方案是使用回调,但我不确定在这种情况下如何使用 redux 处理这个问题。
wordpress.get 只是命名为 axios 配置的导入。
componentDidMount = async () => {
const response = await wordpress.get(
"*********************/api/wp/v2/variants?per_page=100"
);
this.props.fetchData(response);
const data = []
response.data.forEach(ele => {
data.push(ele)
})
this.props.sendFilteredView(data);
};
handleChange = () => {
this.preBuiltFiltering();
};
我省略了预构建的过滤,因为它冗长且过多,它所做的只是根据用户的选择运行过滤器,然后以过滤后的数据集作为参数调度 this.props.sendFilteredView 操作。该操作仅返回有效负载。
然后我通过访问全局状态在子组件中呈现过滤器的结果(我也尝试直接通过道具传递它,同样的问题)。
解决方案
这是一个异步函数,您在 forEach 之后使用带有数据的回调。
所以你需要等待每个完成。
尝试在 forEach 之前使用 await。
componentDidMount = async () => {
const response = await wordpress.get(
"*********************/api/wp/v2/variants?per_page=100"
);
this.props.fetchData(response);
const data = []
await response.data.forEach(ele => {
data.push(ele)
})
this.props.sendFilteredView(data);
};
handleChange = () => {
this.preBuiltFiltering();
};
推荐阅读
- javascript - Javascript 和 Java 中 +(concatenation) 与 == 的运算符优先级
- flutter - 通过 putifAbsent 方法添加新项目后,我的地图没有更新
- c++ - 关于 std::min、std::max 中的比较运算符的困惑
- c# - ImageFactory 正在生成大于 .jpeg 文件的 .webp 文件
- windows - 将一个父目录包含的子目录中的所有文件移动到N个子子目录中
- javascript - 按值中的第一个字符对 JSON 对象数组进行分组时,如何将所有以数字开头的字符分组到同一组中?
- java - 在自定义 Servlet 过滤器中抛出错误时多次调用 doFilter 方法
- php - CakePHP patchEntity() 和 save() 不更新数据库中的特定字段
- javascript - 如何切换页面加载时隐藏的 div
- javascript - 在 div 中获取价值并更改为链接