React постоянно вызывает вашу функцию для визуализации компонента. Поэтому тема постоянно воссоздается.
Использование фабрики с useState для сохранения темы и работа с useEffect, чтобы убедиться, что подписка производится только один раз, должна решить вашу проблему.
Что-то вроде этого:
import React, { Component, useState, useEffect, useRef } from 'react';
import { render } from 'react-dom';
import { debounceTime, map, tap, distinctUntilChanged } from 'rxjs/operators';
import { fromEvent, Subject } from 'rxjs';
import './style.css';
const App = props => {
const [queryName, setQueryName] = useState("");
const [debouncedName, setDebouncedName] = useState("");
const [onSearch$] = useState(()=>new Subject());
useEffect(() => {
const subscription = onSearch$.pipe(
debounceTime(400),
distinctUntilChanged(),
tap(a => console.log(a))
).subscribe(setDebouncedName);
}, [])
const handleSearch = e => {
setQueryName(e.target.value);
onSearch$.next(e.target.value);
};
return (
<div>
<input
placeholder="Search Tags"
value={queryName}
onChange={handleSearch}
/>
<p>Debounced: {debouncedName}</p>
</div>
);
}
render(<App />, document.getElementById('root'));