diff --git a/packages/taro-mobx-common/src/inject.js b/packages/taro-mobx-common/src/inject.js index 389e9c2dd449..1d9de63ad645 100755 --- a/packages/taro-mobx-common/src/inject.js +++ b/packages/taro-mobx-common/src/inject.js @@ -1,46 +1,36 @@ import { getStore } from './store' -const proxiedInjectorProps = { - isMobxInjector: { - value: true, - writable: true, - configurable: true, - enumerable: true - } -} - /** * Store Injection */ -function createStoreInjector (grabStoresFn, component, injectNames, { Component, createElement }) { +function createStoreInjector (grabStoresFn, injectNames, Component) { let displayName = 'inject-' + - (component.displayName || - component.name || - (component.constructor && component.constructor.name) || + (Component.displayName || + Component.name || + (Component.constructor && Component.constructor.name) || 'Unknown') - if (injectNames) displayName += '-with-' + injectNames + if (injectNames) { + displayName += '-with-' + injectNames + } class Injector extends Component { + static isMobxInjector = true static displayName = displayName - render () { + constructor (props) { let newProps = {} - for (let key in this.props) { - if (this.props.hasOwnProperty(key)) { - newProps[key] = this.props[key] + for (let key in props) { + if (props.hasOwnProperty(key)) { + newProps[key] = props[key] } } - const additionalProps = grabStoresFn(getStore() || {}, newProps, this.context) || {} + const additionalProps = grabStoresFn(getStore() || {}, newProps) || {} for (let key in additionalProps) { newProps[key] = additionalProps[key] } - return createElement(component, newProps) + super(Object.assign(...arguments, newProps)) } } - - Object.defineProperties(Injector, proxiedInjectorProps) - Injector.config = component.config - return Injector } @@ -60,20 +50,19 @@ function grabStoresByName (storeNames) { } } -export function inject (/* fn(stores, nextProps) or ...storeNames, { Component, createElement } */) { +export function inject (/* fn(stores, nextProps) or ...storeNames */) { let grabStoresFn - let platformSpecialParams = arguments[arguments.length - 1] if (typeof arguments[0] === 'function') { grabStoresFn = arguments[0] return function (componentClass) { - return createStoreInjector(grabStoresFn, componentClass, null, platformSpecialParams) + return createStoreInjector(grabStoresFn, null, componentClass) } } else { const storeNames = [] - for (let i = 0; i < arguments.length - 1; i++) storeNames[i] = arguments[i] + for (let i = 0; i < arguments.length; i++) storeNames[i] = arguments[i] grabStoresFn = grabStoresByName(storeNames) return function (componentClass) { - return createStoreInjector(grabStoresFn, componentClass, storeNames.join('-'), platformSpecialParams) + return createStoreInjector(grabStoresFn, storeNames.join('-'), componentClass) } } } diff --git a/packages/taro-mobx-h5/src/index.js b/packages/taro-mobx-h5/src/index.js index 7bc8ddae5071..623b3b858746 100644 --- a/packages/taro-mobx-h5/src/index.js +++ b/packages/taro-mobx-h5/src/index.js @@ -1,11 +1,3 @@ -import { Component } from '@tarojs/taro-h5' -import { createElement } from 'nervjs' -import { inject as originInject } from '@tarojs/mobx-common' - -export function inject () { - return originInject(...arguments, { Component, createElement }) -} - -export { observer } from '@tarojs/mobx-common' +export { inject, observer } from '@tarojs/mobx-common' export { default as Provider } from './Provider' diff --git a/packages/taro-mobx-rn/index.js b/packages/taro-mobx-rn/index.js index 2e3d3c8f06f1..1946ab24e131 100644 --- a/packages/taro-mobx-rn/index.js +++ b/packages/taro-mobx-rn/index.js @@ -1,11 +1,2 @@ -import { Component } from '@tarojs/taro-rn' -import { createElement } from 'react' -import { inject as originInject } from '@tarojs/mobx-common' - -export function inject () { - return originInject(...arguments, { Component, createElement }) -} - -export { observer } from '@tarojs/mobx-common' - +export { inject, observer } from '@tarojs/mobx-common' export { default as Provider } from './Provider'