react.js在不同的位置渲染组件
react.js render components at different locations
我开始使用react.js,并有一个(希望)关于教程的简单问题:http://facebook.github.io/react/docs/tutorial.html
我想在我的html中的不同位置呈现"CommentForm",而不是"CommentList"
我尝试了以下方法:
React.renderComponent(
<CommentBox data={data} />,
document.getElementById('comentBox')
);
React.renderComponent(
<CommentForm onCommentSubmit={CommentBox.handleCommentSubmit} />,
document.getElementById('commentForm')
);
但这行不通。实现这一目标的最佳解决方案是什么?谢谢
CommentBox
是一种类型。当您使用JSX创建一个带有它的JSX标记(如<CommentBox>
)时,您就是在创建该类型的实例。这意味着CommentBox.handleCommentSubmit()
是类型上的一个函数,它在实例上不起作用。所以你需要做var box = <CommentBox data={data} />; box.handleCommentSubmit()
,但是。。。
解决两个分离组件之间通信的最佳方法是在它们之间放置一个回调管理器,类似于事件总线。在CommentBox
中,您将开始使用该事件总线订阅/侦听事件,并且这些事件将使用相同的事件总线从CommentForm
中调度。
关键是将回调逻辑放在组件中,而不是试图使用属性来传递它们。根React组件(renderComponent
组件)的属性不应该是回调。
你读过Facebook的Flux吗?这就是我上面描述的。试试RefluxJS:https://github.com/spoike/refluxjs
React.renderComponent
返回对组件的引用。为了使示例正常工作,请将该引用保存在变量中,并将其传递给CommentForm
实例:
var commentBox = React.renderComponent(
<CommentBox data={data} />,
document.getElementById('commentBox')
);
React.renderComponent(
<CommentForm onCommentSubmit={commentBox.handleCommentSubmit} />,
document.getElementById('commentForm')
);
正如@Rygu所提到的,事件总线可能适用于没有父子关系的组件,正如React在组件文档之间的通信中所建议的那样。
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- jquery试图按名称获取按钮位置
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 反应.js:如何更改组件项的位置
- 如何在火狐附加组件SDK中将面板位置更改为鼠标位置
- 在react组件中应用moment()函数的位置
- ExtJS组件从afterrender和焦点事件中获得不同的位置
- 为什么需要重新打开组件类来指定位置参数
- react.js在不同的位置渲染组件
- 如何防止在更新图的nodeDataArray后所有组件的位置发生变化
- 改变组件的位置
- 组件安装前反应设置滚动位置
- ExtJS 浮动面板出现在错误的位置,因为上面的其他组件需要一些时间才能显示