constructor(props, context) {
		super(props, context);
		this._timestamp = new Date().getTime();
		// Register a component only when `destroyOnUnmount` is `true`
		// or component is not present in store
		let components = [];
		if (context && context.getState) {
			({ components } = context.getState());
		}
		if (props.destroyOnUnmount || components.indexOf(props.componentId) === -1) {
			// Register  component
			props.addComponent(props.componentId, this._timestamp);
			props.setQueryListener(props.componentId, props.onQueryChange, props.onError);
			// Update props in store
			props.setComponentProps(props.componentId, props);
		}

		if (props.internalComponent) {
			this.internalComponent = getInternalComponentID(props.componentId);
		}

		// Register internal component
		if (
			this.internalComponent
			&& (props.destroyOnUnmount || components.indexOf(this.internalComponent) === -1)
		) {
			props.addComponent(this.internalComponent, this._timestamp);
			props.setComponentProps(this.internalComponent, props);
		}
		if (props.mockData) {
			props.setTestData(props.componentId, props.mockData);
		}
		if (this.internalComponent) {
			if (this.props.mode !== 'test') {
				if (this.props.setReact) {
					// Watch component after rendering the component to avoid the un-necessary calls
					this.setReact(this.props, false);
				}
			}
		}
	}
ComponentWrapper component is a wrapper component for each ReactiveSearch component
which is responsible for following tasks:
1. Register a component on mount
2. Set query listener
3. Set react prop
4. Follow the [1-3] for the internal component if needed
5. Update component props in redux store
6. Unregister the component on un-mount