У меня есть страница с вкладками. Каждая вкладка будет иметь хэштег для переключения вкладок при нажатии. Я добавил useEffect
для setValue в состоянии.
Файл PageManager:
const RolePageManager = () => {
let location = useLocation()
let { uuid } = useParams()
const [tabIndex, setTabIndex] = useState(0)
useEffect(() => {
if (location.hash) {
switch (location.hash) {
case '#role_info':
setTabIndex(0)
break
case '#members':
setTabIndex(1)
break
case '#permission':
setTabIndex(2)
break
default:
setTabIndex(0)
}
}
}, [location.hash])
......
Тестовый файл:
const setState = jest.fn()
const useStateSpy = jest.spyOn(React, 'useState')
useStateSpy.mockImplementation((init) => [init, setState])
const history = createMemoryHistory()
it('something', () => {
const wrapper = mount(
<Router history={history}>
<RolePageManager />
</Router>
)
history.push('view/id/3#members')
console.log(setState.mock)
})
Проблема:
-> state is not updating ::
{ calls: [], instances: [], invocationCallOrder: [], results: [] }
Если я удалю useEffect
, он будет работать нормально, но будет в l oop. Вот почему я хочу использовать useEffect
, но не смог установить состояние в тесте.
Я что-то пропустил? или мне что-то поменять?