Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reactjs-从应用程序中的任何位置获取组件_Javascript_Reactjs - Fatal编程技术网

Javascript Reactjs-从应用程序中的任何位置获取组件

Javascript Reactjs-从应用程序中的任何位置获取组件,javascript,reactjs,Javascript,Reactjs,我想知道是否有一种方法可以通过使用某种类型的id或按类型获取组件,就像您在DOM操作中所做的那样。比如: var Avatar=React.createClass({ 渲染:函数(){ ... } }); renderComponent(化身({id:'Avatar}),…); ... ... var avatar=React.getComponentById('avatar'); avatar.setProps({url='1〕http://...'}); //或 var avatars=Re

我想知道是否有一种方法可以通过使用某种类型的id或按类型获取组件,就像您在DOM操作中所做的那样。比如:

var Avatar=React.createClass({
渲染:函数(){
...
}
});
renderComponent(化身({id:'Avatar}),…);
...
...
var avatar=React.getComponentById('avatar');
avatar.setProps({url='1〕http://...'});
//或
var avatars=React.getComponentByType('Avatar');
如果(化身长度){
化身[0]。setProps({url='0]http://...'});
}
我不想保留组件实例的引用…

对不起,没有(公开的)已装入组件的全局注册表。如果在安装组件后需要向其发送消息,最好的方法是保存对该组件的引用。对我来说,反复浏览所有
Avatar
组件的列表似乎是一个错误的解决方案,因为它破坏了组件的可组合性,其中每个父组件都可以指定其子组件的道具,并相信外部力量不会改变它们——改变这一点会让你的页面更难推理


如果你提供了一些你想做的事情,也许我能提供更多的帮助。

setProps
是你应该少用的东西。事实上,通常存储对“呈现”组件的引用可能表明您可以以不同的方式构造代码。我们还将
setProps
的使用限制在顶级组件

var avatar = React.renderComponent(<Avatar .../>, node);
avatar.setProps({ foo: '1' });
var avatar=React.renderComponent(,节点);
setProps({foo:'1'});
与此等效,更适合声明性模型:

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

您可以将该渲染封装在函数调用中,以便可以随意调用。

谢谢您的回答。我只是想弄清楚如何在Reactjs中构造应用程序。稍后我会发布更多关于这方面的信息……如果有一些关于如何构造reactjs应用程序的非平凡开源示例,那将是非常棒的:)@Paul你读过这个链接吗?这有点琐碎,但并不复杂到让新开发人员难以理解: