【发布时间】:2020-05-12 15:12:06
【问题描述】:
我不确定这个问题的标题,但我可以在这里更好地解释一下。我有一个依赖于一些信息的自定义钩子。部分信息必须依赖于异步调用。
我遇到了三种情况。
- 尝试有条件地渲染自定义钩子,但由于在不同的渲染器上渲染更多钩子,因此反应不喜欢。
- 自定义挂钩仅安装一次,不会传入所需的更新信息。
- 我尝试将依赖项传递给自定义挂钩,但它会导致无限循环。
这是我正在做的一个小例子。
自定义挂钩:
export function useProducts(options){
const [products, setProducts] = useContext(MyContext)
useEffect(() => {
// only gets called once with `options.asyncValue` === null
// needs to be recalled once the new value is passed in
const loadProducts = async () => {
const data = await asyncProductReq(options)
setProducts(data)
}
loadProducts()
}, []) // if I pass options here it causes the infinite loop
return [products, setProducts]
}
内部函数调用:
export function(props){
const [asyncValue, setValue] = useState(null)
useEffect(() => {
const loadValue = async () => {
const data = await asyncFunc()
setValue(data)
}
loadValue()
}, []}
const options = {...staticValues, asyncValue}
const [products] = useProducts(options)
return (
<h2>Hello</h2>
)
}
我知道我需要将选项传递为依赖项,但如果在 func 内部进行异步调用后对象没有发生变化,我无法弄清楚为什么它会导致无限重新加载。
【问题讨论】:
标签: reactjs react-hooks