Цель следующего кода - отобразить цитаты, полученные от наблюдаемого объекта, в таблице. У меня есть две версии кода: одна - функция реакции с использованием хуков и useEffect, а другая - класс реакции с использованием setState, componentDidMount и componentWillUnmount. С функцией реакции кавычки вообще не отображаются. С классом реакции таблица постоянно обновляется. Если я делаю что-то не так с функцией, что это? Если я использую его правильно, в чем разница между хуками и useEffect в том, что он не работает, и componentDidMount / willUnmount в том, что он работает?
function:
function DisplayQuotes() {
const [storedQuotes, setQuotes] = useState({});
useEffect(() => {
let subscription = SymbolsObservable.subscribe(setQuotes);
return () => subscription.unsubscribe();
}, [storedQuotes, setQuotes]);
return (
<div>
<QuotesTable values={storedQuotes} />
</div>
);
}
class:
class DisplayQuotes extends React.Component {
constructor(props) {
super(props);
this.state = { storedQuotes: {} };
}
componentDidMount() {
this.subscription = SymbolsObservable.subscribe((quotes) =>
this.setState({ storedQuotes: quotes })
);
}
componentWillUnmount() {
this.subscription.unsubscribe();
}
render() {
return (
<div>
<QuotesTable values={this.state.storedQuotes} />
</div>
);
}
}