2013-11-13 2 views
5

Я хотел бы знать, есть ли способ получить компонент, используя какой-либо тип id или по типу, аналогичный тому, который вы делали бы при манипулировании DOM. Что-то вроде:Reactjs - получить компонент из любого места приложения

var Avatar = React.createClass({ 
    render: function() { 
     ... 
    } 
}); 
React.renderComponent(Avatar({id:'avatar'}), ...); 
... 
... 
var avatar = React.getComponentById('avatar'); 
avatar.setProps({url = 'http://...'}); 
// or 
var avatars = React.getComponentByType('Avatar'); 
if (avatars.length) { 
    avatars[0].setProps({url = 'http://...'}); 
} 

Я не хочу, чтобы ссылки экземпляров компонентов ...

ответ

8

setProps это то, что вы должны использовать экономно. Фактически сохранение ссылок на «визуализированные» компоненты в целом может означать, что вы можете структурировать свой код по-разному. Мы также ограничиваем использование вами setProps компонентам верхнего уровня.

var avatar = React.renderComponent(<Avatar .../>, node); 
avatar.setProps({ foo: '1' }); 

эквивалентно этому, что вписывается в немного лучше с декларативной модели:

React.renderComponent(<Avatar .../>, node); 
React.renderComponent(<Avatar ... foo="1" />, node); 

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

+0

Спасибо за ответ. Я определенно структурирую приложение неправильно. –

+0

Было бы здорово иметь некоторые нетривиальные примеры с открытым исходным кодом, как структурировать приложение reactjs :) @Paul –

+1

Вы прочитали эту ссылку? Его немного выше тривиального, но не настолько сложного, чтобы его было сложно понять для нового разработчика: http://facebook.github.io/react/blog/2013/11/05/thinking-in-react .html –

2

К сожалению, нет (публично подвергается) глобального реестра установленных Реагировать компоненты. Если вам необходимо отправить сообщения компоненту после его установки, лучший способ - сохранить ссылку на него. Итерация через список всех компонентов Avatar кажется мне неправильным решением, потому что она разрушает аспект компоновки компонентов, где каждый родительский компонент может указать реквизиты своего ребенка и доверие к тому, что внешние силы не изменят их - изменение этого делает ваш страница сложнее рассуждать.

Если вы предоставляете jsfiddle того, что вы пытаетесь сделать, возможно, я могу помочь.

+0

Спасибо за ответ. Я просто пытаюсь понять, как структурировать приложения в Reactjs. Я расскажу об этом позже ... –

Смежные вопросы