【发布时间】:2020-12-19 13:42:22
【问题描述】:
组件的主要逻辑是当页面加载时,需要从URL(token)中保存参数,并从dispatch()函数中传递。为此,我有一个状态值最初存储为 null,但在渲染组件后我添加了一个令牌。
component.js
const [state, dispatch] = useReducer()
const [value, setValue] = useState(null)
useEffect(() => {
const query = window.location.search || ''
const queryString = new URLSearchParams(query || '')
const token = queryString.get('token')
setValue(token)
}, [value])
useEffect(() => {
if (value && value !== null) {
// console.log(1)
dispatch({
type: 'TEST_TYPE',
payload: { data: value },
})
}
}, [value])
当我想调用useEffect() 中的dispatch() 函数时,组件会重新加载,直到内存已满。我测试了第二种方法,将dispatch()函数调用到useCallback()中,如果有新的变化,调用一次。但是dispatch函数没有被调用
const dis = useCallback(() => dispatch, [])
useEffect(() => {
const query = window.location.search || ''
const queryString = new URLSearchParams(query || '')
const token = queryString.get('token')
if (token) {
dis({
type: 'TEST_TYPE',
payload: { data: token },
})
}
}, [dis])
如何让dispatch 在组件加载后正常工作一次且没有无限循环?
【问题讨论】:
标签: reactjs react-hooks