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