React Rails组件:手动触发重新渲染
React Rails component: manually triggering a re-render
在Rails中,我在一个页面上有一组Bootstrap选项卡,每个选项卡上都有一个React组件,即:
<div id="tab-1" class="tab-pane">
...
<%= react_component('PeopleWidget', person_id: @person.id) %>
...
</div>
<div id="tab-2" class="tab-pane">
...
<%= react_component('ContentWidget', content_id: @content.id) %>
...
</div>
组件:
- 不要互相交谈
- 更新RESTful后端
:
-
PeopleWidget
可以在后端更新一个人的权限 - 这将改变
ContentWidget
为只读行为
我的战术解决方案是:
- 当
tab-2
显示时,我想手动触发ContentWidget
渲染。 - 这将启动从后端加载更新的详细信息
-
ContentWidget
将有适当的更新行为
这感觉像一个变通,但我有一个时间轴:)
我不知道如何手动触发ContentWidget
重新渲染。这可能吗?
你可以采用Flux的一个策略:你可以在组件中设置一个事件监听器,当事件发生时,使用forceUpdate
重新渲染。
在Flux中,组件监听存储。在您的示例中,您可以监听由Bootstrap选项卡触发的事件。
例如,要处理选项卡显示时的事件:
var ContentWidget = React.createClass({
_handleTabShow: function() {
this.forceUpdate()
// any other reload/re-render code here, too
},
componentWillMount: function() {
// start listening for show event:
$('#tab-2').on('shown.bs.tab', this._handleTabShow)
},
componentWillUnmount: function() {
// clean up the handler when the component is removed:
$('#tab-2').off('shown.bs.tab', this._handleTabShow)
}
// The rest of your component code
// goes here....
})
你可以使用forceUpdate让组件重新渲染
相关文章:
- 如何从rails中的代码中删除新行( )
- 通过rails中的Ajax在控制器B的每个视图中渲染控制器a的视图
- Rails 4、Turbolink在渲染一个部分后执行javascript
- 如何强制对模态进行新渲染
- Rails:尝试在按钮单击时渲染部分
- 如何在渲染新视图之前关闭所有事件
- 扩展成员应用程序,包括新的路线,现在没有任何渲染
- React选择性地不将新道具传递给渲染对象
- Rails-使用新的表条目刷新页面
- 骨干JST模板,如何渲染Rails Partials
- 基于Rails的javascript应用程序的安全性:如何在渲染的javascript中验证用户的权限
- Rails 3 javascript:如何使用参数渲染分部
- ajax重新渲染时获得新值
- 在jQuery单击函数上渲染部分Rails
- Rails - 如何通过 AJAX 在渲染的部分中调用 jQuery 事件
- 在chartjs中渲染Rails json数据
- 关注标签触发模糊事件后新渲染的文本输入
- React Router服务器端渲染Rails
- 在选择更改时渲染rails部分
- Rails 5 Redux React Server 端渲染给出客户端 JavaScript 警告“用新的 ..” 替换