You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					57 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					57 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								(function (global, factory) {
							 | 
						||
| 
								 | 
							
								  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
							 | 
						||
| 
								 | 
							
								  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
							 | 
						||
| 
								 | 
							
								  (global = global || self, factory(global.useMemoOne = {}, global.React));
							 | 
						||
| 
								 | 
							
								}(this, function (exports, react) { 'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function areInputsEqual(newInputs, lastInputs) {
							 | 
						||
| 
								 | 
							
								    if (newInputs.length !== lastInputs.length) {
							 | 
						||
| 
								 | 
							
								      return false;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (var i = 0; i < newInputs.length; i++) {
							 | 
						||
| 
								 | 
							
								      if (newInputs[i] !== lastInputs[i]) {
							 | 
						||
| 
								 | 
							
								        return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function useMemoOne(getResult, inputs) {
							 | 
						||
| 
								 | 
							
								    var initial = react.useState(function () {
							 | 
						||
| 
								 | 
							
								      return {
							 | 
						||
| 
								 | 
							
								        inputs: inputs,
							 | 
						||
| 
								 | 
							
								        result: getResult()
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    })[0];
							 | 
						||
| 
								 | 
							
								    var isFirstRun = react.useRef(true);
							 | 
						||
| 
								 | 
							
								    var committed = react.useRef(initial);
							 | 
						||
| 
								 | 
							
								    var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));
							 | 
						||
| 
								 | 
							
								    var cache = useCache ? committed.current : {
							 | 
						||
| 
								 | 
							
								      inputs: inputs,
							 | 
						||
| 
								 | 
							
								      result: getResult()
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    react.useEffect(function () {
							 | 
						||
| 
								 | 
							
								      isFirstRun.current = false;
							 | 
						||
| 
								 | 
							
								      committed.current = cache;
							 | 
						||
| 
								 | 
							
								    }, [cache]);
							 | 
						||
| 
								 | 
							
								    return cache.result;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  function useCallbackOne(callback, inputs) {
							 | 
						||
| 
								 | 
							
								    return useMemoOne(function () {
							 | 
						||
| 
								 | 
							
								      return callback;
							 | 
						||
| 
								 | 
							
								    }, inputs);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  var useMemo = useMemoOne;
							 | 
						||
| 
								 | 
							
								  var useCallback = useCallbackOne;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  exports.useCallback = useCallback;
							 | 
						||
| 
								 | 
							
								  exports.useCallbackOne = useCallbackOne;
							 | 
						||
| 
								 | 
							
								  exports.useMemo = useMemo;
							 | 
						||
| 
								 | 
							
								  exports.useMemoOne = useMemoOne;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Object.defineProperty(exports, '__esModule', { value: true });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}));
							 |