我创建了一个搜索栏来搜索外部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);
}
发布于 2022-10-22 06:44:27
如果您专门询问search
回调中的search
,为什么它仍然是一个空数组[]
,那么您可能需要研究Javascript闭包。
闭包是将函数捆绑在一起(包含)并引用其周围状态(词法环境)的组合。换句话说,闭包允许您从内部函数访问外部函数的作用域。在JavaScript中,每次创建函数时,都会创建闭包。
在本例中,search
函数对result
变量有一个闭包,当调用search
时,该变量将包含search
呈现周期中的任何值。不管await dispatch(fetchResult(value));
对存储做了什么,回调处理程序中的result
值不会改变。
一般来说,如果您想在值更新后注销它们,那么您应该使用带有适当依赖项的useEffect
钩子。
示例:
const result = useSelector(selectResult);
useEffect(() => {
console.log(result);
}, [result]);
const search = value => {
dispatch(fetchResult(value));
};
https://stackoverflow.com/questions/74155394
复制相似问题