Как избежать повторной инициализации магазина с помощью неустановленного
Я пытаюсь unstated
( https://github.com/jamiebuilds/unstated) и мне нравится его простота, но я испытываю неожиданное поведение. На верхнем уровне у меня есть:
<Provider>
<Subscribe to={[MyDataContainer]}>
{myDataStore => (
<TopLevelComponent dataStore={myDataStore} />
)}
</Subscribe>
</Provider>
Затем, спустившись вниз по дереву компонентов, я снова захожу в магазин, используя что-то вроде этого:
<Subscribe to={[MyDataContainer]}>
{myDataStore => (
<Leaf dataStore={myDataStore} />
)}
</Subscribe>
Это прекрасно работает, пока мое дерево остается прежним. Как только у меня есть изменение состояния, которое требует перестройки листьев, объект состояния в моем контейнере данных повторно инициализируется и стирается. Что я делаю неправильно?
2 ответа
Я думаю, что вы можете решить эту проблему двумя способами:
- Выставь экземпляр своего
Container
вместо класса. - Создайте контейнер и введите его в свой
<Provider>
,
В первом варианте экземпляр остается неизменным на каждом import
и у вас будет <Subscribe to={[instance]}>
, Неустановленный документ
Во втором вы можете сделать <Subscribe to={[ContainerClass]}>
но Unstated попытается решить, есть ли экземпляр этого класса, введенный через <Provider>
и использовать этот экземпляр вместо повторного создания. Неустановленный документ
Я решил это, переместив Provider
к App
уровень выше любого компонента, который получает props
/ Повторно делает.