Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   TypeScript + React, почему два объекта? (https://javascript.ru/forum/library-toolkit-framework/60493-typescript-react-pochemu-dva-obekta.html)

Pit 03.01.2016 18:02

TypeScript + React, почему два объекта?
 
Делаю примитивный компонент:
export class TodoItem extends React.Component<any, any> {
...

Создаю его в понятиях React:
var my = React.createElement(TodoItem)

А потом два раза рендерю на разные DIV'ы:
ReactDOM.render(my, document.getElementById('main'));
ReactDOM.render(my, document.getElementById('main2'));

Я бы ожидал, что экземпляр my будет два раза отрендерен, но ощущение, что работают два разных экземпляра класса TodoItem.

То есть, я делаю callback на onClick, например (с bind'ом конечно). И в этом колбэке меняю свойство класса, так вот эти два отрендеренных компонента как будто работают независимо друг от друга. Как будто получилось два экземпляра TodoItem. Но где их создалось два? Я же создаю my один раз...

Pit 03.01.2016 18:06

ну и заодно вопрос, если можно...
Если вот делать так:
ReactDOM.render(my, document.getElementById('main'));
ReactDOM.render(my, document.getElementById('main'));

впрочем как и:
var my = React.createElement(TodoItem)
var my2 = React.createElement(TodoItem)
ReactDOM.render(my, document.getElementById('main'))
ReactDOM.render(my2, document.getElementById('main'))


То появляется визуально только один компонент. Почему так?

Safort 03.01.2016 18:13

Pit,
Цитата:

ReactDOM.render(my, document.getElementById('main'));
ReactDOM.render(my, document.getElementById('main'));

А как должно быть? Ты же один и тот же компонент в один и тот же элемент помещаешь.


Часовой пояс GMT +3, время: 05:42.