Запретить реакт-вью непосредственно внутри яте-бокса by vitkarpov · Pull Request #58 · yandex-ui/noscript-react · GitHub
Skip to content

Запретить реакт-вью непосредственно внутри яте-бокса#58

Merged
vitkarpov merged 3 commits into
masterfrom
issue-41-I
Dec 29, 2016
Merged

Запретить реакт-вью непосредственно внутри яте-бокса#58
vitkarpov merged 3 commits into
masterfrom
issue-41-I

Conversation

@vitkarpov

Copy link
Copy Markdown
Member

No description provided.

@vitkarpov

Copy link
Copy Markdown
Member Author

.render()
.then(function() {
expect($('body').find(this.nodeV1)).to.have.length.above(0);
expect(this.isViewInDOMOnComponentDidMount).to.be.true;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это нечестная проверка, потому что на момент вызова этого кода нода всегда будет в DOM (просто ссылка в this.nodeV1 была записана на componentDidMount). А нужен именно факт наличия на момент вызова колбека.

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

осталось понять, что идёт не так 😄

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

@mishk0, @vitkarpov Подебажил, да, дело в _sortViewNodes. На второй шаг создаётся новая вьюшка для app3 лайаута, т.к. был изменён ключ. Она рендрится и в итоге создание компонента происходит до того, как бокс заменит предыдущее реактивное view на новое.

@Rebulus Rebulus added this to the 1.0.8 milestone Sep 28, 2016
@vitkarpov

Copy link
Copy Markdown
Member Author

Кстати, а почему при первой отрисовке такого нет? Вроде _sortViewNodes всегда вызывается после _updateHTML, как написал @mishk0

@Rebulus Rebulus added the bug label Sep 28, 2016
@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

При первой отрисовке мы имеем полное дерево отображения, а не единичную вьюшку. В итоге, т.к. app корневой, то он вставит сразу весь сет в DOM, а лишь потом пойдёт по деткам. Где и случится в итоге рендер компонента.

@vitkarpov

Copy link
Copy Markdown
Member Author

Окай :)

@vitkarpov

Copy link
Copy Markdown
Member Author

Остально понять, как это правильно б зачинить :)

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

В ns на данный момент нет инструмента понимания, что бокс переставляет вьюшки. Он прячет эту логику в себе. Моё предложение, пока запретить использование обычных боксов в сочетании с реактивной вьюшкой в теле).

@vitkarpov

Copy link
Copy Markdown
Member Author

В принципе, всегда можно воткнуть реактивную вьюшку и положить в нее бокс.

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

Если потребуется сохранить yate бокс, то в него надо будет ложить yate вью, а вот в ней уже можно reactView.

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

Но надо подумать ещё чутка, вдруг придёт решение 😄

@Rebulus

Rebulus commented Sep 28, 2016

Copy link
Copy Markdown
Collaborator

Как вариант, можно ещё вынести _renderElement на ns-view-htmlinit файзу.

@Rebulus

Rebulus commented Oct 27, 2016

Copy link
Copy Markdown
Collaborator

@vitkarpov может быть есть какие-то новости про это ишью?

@vitkarpov

Copy link
Copy Markdown
Member Author

Пока все так же: не придумали как чинить, и дергаем _renderElement на ns-view-htmlinit в той вьюшке, где это актуально.

@Rebulus

Rebulus commented Oct 27, 2016

Copy link
Copy Markdown
Collaborator

Понятно, жаль(

@Rebulus Rebulus modified the milestones: 1.1.0, 1.0.8 Dec 29, 2016
@vitkarpov

Copy link
Copy Markdown
Member Author

Мне кажется, что надо это просто закрыть и в качестве фикса «запретить использование обычных боксов в сочетании с реактивной вьюшкой в теле» 🐲

Кажется, что с точки зрения приложения всегда можно этого избежать — надо только в документации отметить. Потому что задачи поддержать все возможные взаимодействия ns+react нет — надо дать возможность писать часть дерева на реакте.

@vitkarpov

Copy link
Copy Markdown
Member Author

Можно кидать console.warning при попытке создать реактовую вьюху внутри яте-бокса. Для разработчика будет понятно что происходит.

- кидаем исключение с понятным сообщением (для удобного переезда)
- правим тесты (добавляем везде реакт-обертку над боксом, где актуально)
@vitkarpov vitkarpov removed the bug label Dec 29, 2016
@vitkarpov vitkarpov changed the title Тест #41 Запретить реакт-вью непосредственно внутри яте-бокса Dec 29, 2016
@vitkarpov vitkarpov requested a review from Rebulus December 29, 2016 13:03
@Rebulus

Rebulus commented Dec 29, 2016

Copy link
Copy Markdown
Collaborator

@vitkarpov vitkarpov merged commit ea9e850 into master Dec 29, 2016
@vitkarpov vitkarpov deleted the issue-41-I branch December 29, 2016 14:52
@vitkarpov vitkarpov removed this from the 1.1.0 milestone Dec 30, 2016
vitkarpov added a commit that referenced this pull request Dec 30, 2016
После мерджа #58 в мастер нужно внести соответствующие правки в свежие тесты для #54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants