提问人:Abhinandan Khilari 提问时间:8/18/2023 最后编辑:Abhinandan Khilari 更新时间:8/18/2023 访问量:37
React:自定义钩子中的石板状态值
React: Slate state value in a custom hook
问:
我有一个自定义的 react 钩子,如下所示,返回一个方法useSearchAllLocations()
fetchLocations()
export const useSearchAllLocations = (isFilterSelected = false) => {
console.log('Outer isFilterSelected ', isFilterSelected);
const fetchLocations = useCallback(
async () => {
console.log('Inner isFilterSelected ', isFilterSelected);
// Some async functionality...
},
[isFilterSelected],
);
return { fetchLocations };
};
我正在这样的组件中使用这个钩子
const isFilterSelected = useSelector(isFilterSelectedSelector);
const { fetchLocations } = useSearchAllLocations(isFilterSelected);
在组件中,有一个 onSearch 函数,该函数具有调用。fetchLocations()
const onSearch = () => {
// Some code...
fetchLocations();
};
该函数在按钮单击事件上调用,并且还作为子组件传递。然后,子组件对某些用户事件调用该函数,从而导致调用 。onSearch
prop
onSearch
fetchLocations()
当组件中的 isFilterSelected 发生更改时,钩子会按预期重新触发,并在日志中的钩子中显示 isFilterSelected 参数的正确值 -console.log('Outer isFilterSelected ', isFilterSelected);
但是,对于来自日志中的组件的调用,变量的值似乎已经过时 - 并且与外部日志不匹配。为什么日志中的 isFilterSelected 值过时 -fetchLocations()
console.log('Inner isFilterSelected ', isFilterSelected);
console.log('Inner isFilterSelected ', isFilterSelected);
我已经很好地提供了作为依赖项,甚至尝试删除包装器,但问题仍然存在。isFilterSelected
useCallback
useCallback
我知道在最初调用钩子时会创建一个闭包,因此其中方法中当时 的值是初始值,即 .但是,当组件中的值发生更改时,钩子的重新调用难道不应该根据词法范围用方法的新闭包更新以前的闭包吗?useSearchAllLocations
isFilterSelected
fetchLocations
false
isFilterSelected
useSearchAllLocations
fetchLocations
答: 暂无答案
下一个:另一个闭合中的闭合是逃逸或非逃逸
评论
fetchLocations
onSearch
useCallback()
React.memo()
onSearch
fetchLocations
isFilterSelected
onSearch