Я пытаюсь использовать rxjs внутри use-effect функционального компонента Hook.
Я считаю, что useEffect можно использовать так же, как componentDidMount и componentDidUpdate.
const Counter = () => {
const [state, setState] = useState({counter: 0});
useEffect(() => {
subscriber.subscribe((value) => {
let { counter } = state;
counter += value;
setState({ counter });
});
});
return (
<div>
<span>Counter: {state.counter}</span>
<Crementer />
</div>
);
Подписчик - простой субъект rxjs
const subscriber = new BehaviorSubject(0);
Также есть компонент для увеличения / уменьшения счетчика
const Crementer = () => {
return(
<>
<button onClick={() => subscriber.next(1)}>+</button>
<button onClick={() => subscriber.next(-1)}>-</button>
</>
)
};
(я тоже пробовал counterService.send (1))
Проблема в том, что как только я нажимаю + или - счетчик непрерывно увеличивается или уменьшается.
Вы можете увидеть поведение здесь: https://stackblitz.com/edit/react-9auz4d
Может быть, потому что useEffect работает и при обновлении? Это, вероятно, будет работать в компоненте класса с componentDidMount ()?