Skip to content

Commit c8c53f1

Browse files
josepottimdorr
authored andcommitted
Remove deps of useSelector (#1272)
1 parent a7daf47 commit c8c53f1

File tree

2 files changed

+6
-38
lines changed

2 files changed

+6
-38
lines changed

src/hooks/useSelector.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ const useIsomorphicLayoutEffect =
2424
* useful if you provide a selector that memoizes values).
2525
*
2626
* @param {Function} selector the selector function
27-
* @param {any[]} deps (optional) dependencies array to control referential stability
28-
* of the selector
2927
*
3028
* @returns {any} the selected state
3129
*
@@ -36,11 +34,11 @@ const useIsomorphicLayoutEffect =
3634
* import { RootState } from './store'
3735
*
3836
* export const CounterComponent = () => {
39-
* const counter = useSelector(state => state.counter, [])
37+
* const counter = useSelector(state => state.counter)
4038
* return <div>{counter}</div>
4139
* }
4240
*/
43-
export function useSelector(selector, deps) {
41+
export function useSelector(selector) {
4442
invariant(selector, `You must pass a selector to useSelectors`)
4543

4644
const { store, subscription: contextSub } = useReduxContext()
@@ -51,15 +49,13 @@ export function useSelector(selector, deps) {
5149
contextSub
5250
])
5351

54-
const memoizedSelector = useMemo(() => selector, deps)
55-
5652
const latestSubscriptionCallbackError = useRef()
57-
const latestSelector = useRef(memoizedSelector)
53+
const latestSelector = useRef(selector)
5854

5955
let selectedState = undefined
6056

6157
try {
62-
selectedState = memoizedSelector(store.getState())
58+
selectedState = selector(store.getState())
6359
} catch (err) {
6460
let errorMessage = `An error occured while selecting the store state: ${
6561
err.message
@@ -77,7 +73,7 @@ export function useSelector(selector, deps) {
7773
const latestSelectedState = useRef(selectedState)
7874

7975
useIsomorphicLayoutEffect(() => {
80-
latestSelector.current = memoizedSelector
76+
latestSelector.current = selector
8177
latestSelectedState.current = selectedState
8278
latestSubscriptionCallbackError.current = undefined
8379
})

test/hooks/useSelector.spec.js

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*eslint-disable react/prop-types*/
22

3-
import React, { useReducer } from 'react'
3+
import React from 'react'
44
import { createStore } from 'redux'
55
import { renderHook, act } from 'react-hooks-testing-library'
66
import * as rtl from 'react-testing-library'
@@ -154,34 +154,6 @@ describe('React', () => {
154154

155155
expect(renderedItems.length).toBe(1)
156156
})
157-
158-
it('re-uses the selector if deps do not change', () => {
159-
let selectorId = 0
160-
let forceRender
161-
162-
const Comp = () => {
163-
const [, f] = useReducer(c => c + 1, 0)
164-
forceRender = f
165-
const renderedSelectorId = selectorId++
166-
const value = useSelector(() => renderedSelectorId, [])
167-
renderedItems.push(value)
168-
return <div />
169-
}
170-
171-
rtl.render(
172-
<ProviderMock store={store}>
173-
<Comp />
174-
</ProviderMock>
175-
)
176-
177-
rtl.act(forceRender)
178-
179-
// this line verifies the susbcription callback uses the same memoized selector and therefore
180-
// does not cause a re-render
181-
store.dispatch({ type: '' })
182-
183-
expect(renderedItems).toEqual([0, 0])
184-
})
185157
})
186158

187159
describe('edge cases', () => {

0 commit comments

Comments
 (0)