humus-old/client/ui/hooks/use-property-change.js

21 lines
518 B
JavaScript

// 3rd party.
import React, {useEffect, useState} from 'react';
export function usePropertyChange(object, property, defaultValue) {
const [value, setValue] = useState(defaultValue);
useEffect(() => {
if (!object) {
return;
}
const onValueChanged = () => {
setValue(object[property]);
};
onValueChanged();
object.on(`${property}Changed`, onValueChanged);
return () => {
object.off(`${property}Changed`, onValueChanged);
};
}, [object, value]);
return value;
}