Riot.js: монтирование тегов с той же переменной

У меня есть 3 таможенные метки: my-tag1, my-tag2 а также my-tag3

И я использую их так:

<my-tag1>
  <my-tag2 attr1="a">
    <my-tag3 attr2="b"></my-tag3>
  </my-tag2>
</my-tag1>

Я монтирую все теги так:

riot.mount('*', { store:reduxStore });

my-tag1 может получить доступ к store но my-tag2а также my-tag3 не могу это сделать.

Однако, если я сделаю следующее, my-tag2 можешь использовать store:

<my-tag1>
  <my-tag2 attr1="a" store={opts.store}>
    <my-tag3 attr2="b"></my-tag3>
  </my-tag2>
</my-tag1>

Зачем? Я должен сделать это во всех моих тегах?

2 ответа

riot.mount('*') монтирует все теги верхнего уровня. Теги верхнего уровня позаботятся о монтировании своих вложенных тегов соответственно. Если вы хотите пройти мимо магазина, я думаю, что лучше всего использовать миксины. Смотрите http://riotjs.com/guide/

Ура!

Когда теги вложены, для дочернего тега создается новый контекст. В новом контексте все наследуемые свойства родителя устанавливаются в undefined,

Рекомендации:

В вашем примере, добавив store={opts.store} в my-tag2вы определяете опцию store в my-tag2Новый контекст. Если вы этого не сделаете, вариант store в my-tag2контекст унаследован отmy-tag1, но он установлен в undefined (так my-tag2 видит undefined для storeценность).

Для того, чтобы поделиться storeценность через my-tag1, my-tag2, а также my-tag3Есть два способа, на мой взгляд:

1) my-tag3 инициализирует storeценность для my-tag2"s store

<my-tag1>
  <my-tag2 attr1="a" store={opts.store}>
    <my-tag3 attr2="b" store={opts.store}></my-tag3>
  </my-tag2>
</my-tag1>

2) my-tag3 инициализирует storeценность для my-tag1"s store с использованием parent переменная.

<my-tag1>
  <my-tag2 attr1="a" store={opts.store}>
    <my-tag3 attr2="b" store={parent.opts.store}></my-tag3>
  </my-tag2>
</my-tag1>
Другие вопросы по тегам