Reactjs useSelector更新导致useEffect循环

Reactjs useSelector更新导致useEffect循环,reactjs,redux,react-hooks,use-effect,Reactjs,Redux,React Hooks,Use Effect,我有一个有用的效果 function Component () { const facets = useSelector(getFacets) useEffect(() => { dispatch(search(facets, param2, param3)) }, [dispatch, facets, param2, param3]) //rest of component with return } 现在搜索将实际更新fac

我有一个有用的效果

function Component () {
    const facets = useSelector(getFacets)

    useEffect(() => {
        dispatch(search(facets, param2, param3))
    }, [dispatch, facets, param2, param3])
    
    //rest of component with return
}
现在搜索将实际更新
facets

//Inside my slice
const search = (facets, param2, param3) => async(dispatch) => {
   //do a fetch using param2 and param3
   //fetch comes back with a facets object
   //alter response facets object based on 'old' facets
   dispatch(setFacets(newFacets)) // set the new facets
}
问题是,当此useEffect运行时,重新渲染会导致
const facets=useSelector(getFacets)
加载新值。。。Linting要求我在
useffect
中使用
facets
作为依赖项,但将其放在那里意味着它将反复循环。我该怎么阻止它

我试着从useEffect中提取逻辑并将其放入useCallback中,但同样,linting要求我将
facets
作为依赖项,这基本上是相同的问题。

解决了
Sooooo Redux有一些存储方法<代码>调度是其中之一。对我来说,我正在寻找的存储方法是。更多信息和cmd/ctrl+F'getState'

我认为我无法访问切片中的状态,因为React由于明显的原因不允许我在切片中使用
useSelector
。当时对我来说不明显的是,我可以通过
getState

因此,编辑后的代码如下所示:
  • 删除组件中的
    facets
    参数,因为我不再需要它了
  • 编辑切片内的函数,删除
    facets
    param并将
    getState
    dispatch
  • 瞧,再也没有无限循环了。
    function Component () {
        //const facets = useSelector(getFacets) --> NO LONGER NEEDED
    
        useEffect(() => {
            dispatch(search(/*facets, */param2, param3))
        }, [dispatch, /*facets, */param2, param3])
        
        //rest of component with return
    }
    
    //Inside my slice
    const search = (param2, param3) => async(dispatch, getState) => {
       //do a fetch using param2 and param3
       //fetch comes back with a facets object
       //grab 'old' facets using NEW getState and same selector: getFacets
       oldFacets = getFacets(getState())
       //alter response facets object based on oldFacets
       dispatch(setFacets(newFacets)) // set the new facets
    }