Reactjs 上下文API历史记录。侦听无法读取属性';听一听';未定义的

Reactjs 上下文API历史记录。侦听无法读取属性';听一听';未定义的,reactjs,browser-history,context-api,Reactjs,Browser History,Context Api,我正在使用带有浏览器历史推送和弹出状态的上下文API。当前出现此错误无法读取未定义的属性“listen”。如果我将我的浏览器历史记录功能移动到另一个组件,那么它可以完美地工作,没有错误。我没有在下面的代码中包含我所有的州。任何帮助都会很棒的谢谢大家 import React, { useState, createContext, useEffect } from 'react' import { useHistory } from 'react-router-dom' const histor

我正在使用带有浏览器历史推送和弹出状态的上下文API。当前出现此错误
无法读取未定义的属性“listen”
。如果我将我的浏览器历史记录功能移动到另一个组件,那么它可以完美地工作,没有错误。我没有在下面的代码中包含我所有的州。任何帮助都会很棒的谢谢大家

import React, { useState, createContext, useEffect } from 'react'
import { useHistory } from 'react-router-dom'

const history = useHistory()
const [keys, setKeys] = useState([])

useEffect(() => {
return history.listen(location => {
    if (history.action === 'PUSH') { 
    setKeys([location.key])
    }
    if (history.action === 'POP') {
    if (keys[1] === location.key) { 
        setKeys(([ _, ...keys ]) => keys) 
        setPage(page + 1)
        setCount(count + 1) 
        setPercentage(percentage + 20)
    } else { 
        setKeys((keys) => [ location.key, ...keys ]) 
        setPage(page - 1) 
        setCount(count - 1) 
        setPercentage(percentage - 20) 
    }
    }
})
}, [keys, count, percentage])

您是否正在渲染组件树上比该组件更远的
?你说它在另一个组件中工作,所以我怀疑你的浏览器路由器是这个组件的后代,而它需要是一个祖先。不,我的上下文API是我的管理状态,并包装了我的所有路由。它在另一个拥有自己RESTAPI的组件中工作。只需添加上面的功能,我就可以浏览历史,没有错误。我是否需要以某种方式初始化它?