【发布时间】:2020-11-02 01:11:54
【问题描述】:
据我了解,useState 钩子的更新函数应该是批量运行的,而不是每次调用时都重新渲染组件。我创建了以下自定义挂钩:
function useObservable(source) {
const [v, setV] = useState();
useEffect(() => {
const subscription = source.subscribe(setV);
return () => subscription.unsubscribe();
}, [source]);
return v;
}
但是当我多次使用它时,每次发射都会导致重新渲染:
const subject = new Subject();
setTimeout(() => {
subject.next("Value");
}, 1000);
function App() {
const value = useObservable(subject);
const value2 = useObservable(subject);
const value3 = useObservable(subject);
console.log("render"); <=== called 3 times
return (
<div>
<p>{value}</p>
</div>
);
}
有没有办法优化这个?我是不是误会了什么?
【问题讨论】:
-
你在 index.js 中使用 React.StrictMode 吗?
-
我不是在严格模式下
标签: reactjs