违背hooks原则
mankeheaven opened this issue · 1 comments
mankeheaven commented
hooks是依赖顺序的,以下代码应该会报错,至于为啥违反了react原则又没报错,这个很有水准
export function useObservableInternal<TOutput, TInputs extends Readonly<any[]>>(
useCustomEffect: typeof useEffect,
init:
| (() => Observable<TOutput>)
| ((inputs$: Observable<[...TInputs]>) => Observable<TOutput>),
inputs?: [...TInputs]
): Observable<TOutput> {
if (!inputs) {
return useRefFn(init as () => Observable<TOutput>).current
}
const inputs$Ref = useRefFn(() => new BehaviorSubject(inputs))
const source$Ref = useRefFn(() => init(inputs$Ref.current))
const firstEffectRef = useRef(true)
useCustomEffect(() => {
if (firstEffectRef.current) {
firstEffectRef.current = false
return
}
inputs$Ref.current.next(inputs)
}, inputs)
return source$Ref.current
}
crimx commented
https://observable-hooks.js.org/zh-cn/api/#useobservablestate
见文档说明,这是兼容了两个不一样的使用场景,所以不会冲突。但如果让我再设计一遍可能不会这么*了嘻嘻😁。