diff --git a/src/Meteor.js b/src/Meteor.js index 0eaafbd..c25458c 100644 --- a/src/Meteor.js +++ b/src/Meteor.js @@ -11,6 +11,7 @@ import { Collection } from './Collection'; import call from './Call'; import withTracker from './components/ReactMeteorData'; +import useTracker from './components/useTracker'; import ReactiveDict from './ReactiveDict'; @@ -29,6 +30,7 @@ module.exports = { return new Collection(name, options); }, withTracker, + useTracker, getData() { return Data; }, diff --git a/src/components/useTracker.js b/src/components/useTracker.js new file mode 100644 index 0000000..f498a88 --- /dev/null +++ b/src/components/useTracker.js @@ -0,0 +1,23 @@ +import React, { useEffect, useState } from 'react'; +import Trackr from 'trackr'; + +export default useTracker = (trackerFn, deps = []) => { + const [response, setResponse] = useState(trackerFn()); + let computation = null; + + const stopComputation = () => { + computation && computation.stop(); + computation = null; + }; + + useEffect(() => { + stopComputation(); + Trackr.autorun(currentComputation => { + computation = currentComputation; + setResponse(trackerFn()); + }); + return stopComputation; + }, deps); + + return response; +};