React опубликовал хороший пример пользовательского хука (useFriendStatus
), где хук подписывается на API для обновления онлайн-статуса. Я пытался смоделировать этот пример. Моя ловушка выглядит следующим образом:
export default function useStore(id) {
const [data, setStatus] = useState(DataLayer.getData());
useEffect(() => {
function handleStatusChange() {
console.log("udpate ...." + id);
console.log(DataLayer.getData());
setStatus(DataLayer.getData());
}
DataLayer.register({"id":id, "callback":handleStatusChange});
setStatus(DataLayer.getData());
return () => {
DataLayer.unregister(id, handleStatusChange);
};
});
return data;
}
DataLayer реализует метод setInterval, который постоянно уведомляет ловушку и изменяет данные для целей тестирования. Следовательно, я всегда получаю на консоли сообщение об обновлении ...., а также текущий объект. Это отлично работает!
Мой компонент выглядит следующим образом: , но он не выполняет рендеринг :
function MyComponent (props) {
const config = useStore(Math.floor((Math.random() * 1000) + 1));
return (
<div >
<pre>
<code> {JSON.stringify(config, null, 3)}
);}
Почему мой компонент, использующий пользовательский хук, не обновляется?