等待,但返回意外结果~ Redux应用程序

z18hc3ub  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(130)

我创建了一个搜索栏来搜索来自外部API的数据,所以我创建了一个async函数来从API中获取数据。这就是我遇到问题的地方。在切片文件中的函数中,获取数据后,我可以console.log数据,它会打印出我所需要的数据。但在我想使用这些数据做一些事情的组件文件中,当我使用useSelector()取出数据并将其输出到控制台时,它返回一个空数组[]

const result = useSelector(selectResult);

//This is the function that I pass in a value and it will dispatch an action
//And return a new value to the store
const search = async value => {
  await dispatch(fetchResult(value));
  console.log(result);
}
3htmauhk

3htmauhk1#

如果您特别询问search回调中的console.log(result);,为什么它仍然是空数组[],那么您可能需要研究Javascript closures
闭包是一个函数与其周围状态(词法环境)的引用捆绑在一起(被封装)的组合。换句话说,闭包允许您从内部函数访问外部函数的作用域。在JavaScript中,每次创建函数时都会创建闭包。
在这种情况下,search函数在result变量上有一个闭包,当search被调用时,result变量将具有来自渲染周期的任何值。无论await dispatch(fetchResult(value));对存储做了什么,result值在回调处理程序中都不会改变。
一般来说,如果你想在值更新后注销它们,那么你应该使用useEffect钩子和适当的依赖关系。
示例:

const result = useSelector(selectResult);

useEffect(() => {
  console.log(result);
}, [result]);

const search = value => {
  dispatch(fetchResult(value));
};

相关问题