diff --git a/src/components/Store.test.ts b/src/components/Store.test.ts index e25336e411..28c2545fbf 100644 --- a/src/components/Store.test.ts +++ b/src/components/Store.test.ts @@ -48,6 +48,28 @@ describe('Store', () => { expect(uut.getComponentClassForName('example.mycomponent')).toEqual(MyWrappedComponent); }); + it.each(['toString', '__proto__'])('treats %s as a regular store key', (key) => { + expect(uut.getPropsForId(key)).toEqual({}); + expect(uut.getComponentClassForName(key)).toBeUndefined(); + expect(uut.getComponentInstance(key)).toBeUndefined(); + expect(uut.hasRegisteredWrappedComponent(key)).toBe(false); + + const ComponentClass = () => class MyComponent extends React.Component {}; + const componentInstance = {} as IWrappedComponent; + class WrappedComponent extends React.Component {} + + uut.updateProps(key, { foo: 'bar' }); + uut.setComponentClassForName(key, ComponentClass); + uut.setComponentInstance(key, componentInstance); + uut.setWrappedComponent(key, WrappedComponent); + + expect(uut.getPropsForId(key)).toEqual({ foo: 'bar' }); + expect(uut.getComponentClassForName(key)).toBe(ComponentClass); + expect(uut.getComponentInstance(key)).toBe(componentInstance); + expect(uut.hasRegisteredWrappedComponent(key)).toBe(true); + expect(uut.getWrappedComponent(key)).toBe(WrappedComponent); + }); + it('clear props by component id when clear component', () => { uut.updateProps('refUniqueId', { foo: 'bar' }); uut.clearComponent('refUniqueId'); diff --git a/src/components/Store.ts b/src/components/Store.ts index 1c67dd7b77..14707ecd0c 100644 --- a/src/components/Store.ts +++ b/src/components/Store.ts @@ -3,11 +3,11 @@ import { ComponentProvider } from 'react-native'; import { IWrappedComponent } from './ComponentWrapper'; export class Store { - private componentsByName: Record = {}; - private propsById: Record = {}; - private pendingPropsById: Record = {}; - private componentsInstancesById: Record = {}; - private wrappedComponents: Record> = {}; + private componentsByName: Record = Object.create(null); + private propsById: Record = Object.create(null); + private pendingPropsById: Record = Object.create(null); + private componentsInstancesById: Record = Object.create(null); + private wrappedComponents: Record> = Object.create(null); private lazyRegistratorFn: ((lazyComponentRequest: string | number) => void) | undefined; updateProps(componentId: string, props: any, callback?: () => void) {