@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
28 lines (24 loc) • 1.15 kB
JavaScript
;
var react = require('react');
var index = require('../utils/index.js');
/**
* `useCreation` 是 `useMemo` 或 `useRef` 的替代品。
* 因为 `useMemo` 不能保证被 memo 的值一定不会被重计算,而 `useCreation` 可以保证这一点。
* 相比于 `useRef`,你可以使用 `useCreation` 创建一些常量,这些常量和 `useRef` 创建出来的 ref 有很多使用场景上的相似,但对于复杂常量的创建,`useRef` 却容易出现潜在的性能隐患。
* const a = useRef(new Subject()) // 每次重渲染,都会执行实例化 Subject 的过程,即便这个实例立刻就被扔掉了
* const b = useCreation(() => new Subject(), []) // 通过 factory 函数,可以避免性能隐患
*/
function useCreation(factory, deps) {
var current = react.useRef({
deps: deps,
initialized: false,
obj: undefined,
}).current;
if (current.initialized === false || !index.depsAreSame(current.deps, deps)) {
current.deps = deps;
current.obj = factory();
current.initialized = true;
}
return current.obj;
}
module.exports = useCreation;