remx
Version:
Opinionated mobx
72 lines (53 loc) • 3.11 kB
JavaScript
var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[typeof Symbol==='function'?Symbol.iterator:'@@iterator'](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"])_i["return"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if((typeof Symbol==='function'?Symbol.iterator:'@@iterator')in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _react=require('react');var _react2=_interopRequireDefault(_react);
var _mobx=require('mobx');var mobx=_interopRequireWildcard(_mobx);
var _logger=require('./logger');var Logger=_interopRequireWildcard(_logger);
var _useUpdate=require('../utils/useUpdate');var _useUpdate2=_interopRequireDefault(_useUpdate);
var _globalState=require('./globalState');function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}newObj.default=obj;return newObj;}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}
var useConnect=function useConnect(mapStateToProps){var dependencies=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];var _React$useState=
_react2.default.useState({}),_React$useState2=_slicedToArray(_React$useState,1),mutableState=_React$useState2[0];
var update=(0,_useUpdate2.default)();
var dispose=_react2.default.useMemo(
function(){return(
mobx.reaction(
function(){
Logger.startLoggingMapStateToProps();
mutableState.lastError=undefined;
try{
(0,_globalState.incrementRenderingObserverDepth)();
mutableState.returnValue=mapStateToProps.apply(undefined,_toConsumableArray(dependencies));
}catch(err){
console.warn(
'Encountered an uncaught exception that was thrown by mapStateToProps in useConnect hook',
err);
mutableState.lastError=err;
}finally{
(0,_globalState.decrementRenderingObserverDepth)();
}
Logger.endLoggingMapStateToProps(
'useConnect hook',
mutableState.returnValue);
return mutableState.returnValue;
},
update,
{fireImmediately:false}));},
dependencies);
if(mutableState.lastError){
throw mutableState.lastError;
}
if(mutableState.dispose&&mutableState.dispose!==dispose){
mutableState.dispose();
}
mutableState.dispose=dispose;
_react2.default.useEffect(function(){return function(){return mutableState.dispose();};},[]);
if(!Object.prototype.hasOwnProperty.call(mutableState,'returnValue')){
(0,_globalState.incrementRenderingObserverDepth)();
try{
return mapStateToProps.apply(undefined,_toConsumableArray(dependencies));
}finally{
(0,_globalState.decrementRenderingObserverDepth)();
}
}
return mutableState.returnValue;
};
module.exports={
useConnect:useConnect};