reactjs - React 没有渲染 UI 中的所有元素
问题描述
我正在开发一个应用程序,我们使用 Backbone,然后在一些 Backbone 视图中渲染 React(基本上从 Backbone 缓慢过渡到 React)。我遇到了一个问题,我的标题上有由 Backbone 控制的按钮,这会导致由 React Elements 构建的 UI 发生变化。由于几个内部原因,我们必须使用 React 15。问题是它在第一次访问视图时工作,但是如果我离开视图转到另一个视图然后返回到同一个视图,单击按钮会导致 React渲染(好),但添加的 UI 元素不会在 UI 中的任何位置呈现。
为简单起见,我只是想添加一个简单的 div。这是工作流程
导航到主干/反应视图
单击主干中的按钮
按钮发出事件
反应监听事件
React 将新的 div 添加到渲染中,并且 div 按预期显示在页面上
使用浏览器后退按钮离开视图
URL 更改和主干加载不同的视图
导航回主干/反应视图
单击主干中的按钮
按钮发出事件
反应监听事件
React 渲染但新的 div 未添加到页面
我检查过的
- 查看 React 渲染生成的对象,新的 div 确实在这两种情况下都存在
- 扫描 DOM,给 div 一些独特的文本,它不在 DOM 中
我没有显示任何代码,因为会有太多,我更多的是寻找想法,或者在什么情况下,即使 React 渲染在渲染函数对象中返回该元素,React 也可能无法在 UI 中添加某些元素生成。或者另一方面,也许它是 Backbone 限制 React 的东西,我不能确定。
{$$typeof: Symbol(react.element), type: "div", key: null, ref: null, props: {…}, …}
任何探索的想法或途径将不胜感激!
解决方案
我解决了这个问题。不知何故,reactDom 决定不渲染模式,即使渲染方法按预期返回组件。解决方法是将 ReactDom.render 返回的 React 组件作为变量存储在主干中,然后在那里而不是在实际的 React 组件中操作其状态。
在骨干网:
this.component = ReactDOM.render( ...)
然后当按下按钮时(由 Backbone 处理):
handleConfigure: function() {
this.component.setState({ 'showConfigModal': !this.component.state.showConfigModal });
},
推荐阅读
- javascript - 如何从反应连接到谷歌云存储并获取私有对象
- python - 在 python IDLE 中没有得到程序输出
- json - 我怎样才能弄清楚一个文本文件是用什么压缩的?
- laravel - 如果用户不存在,我如何从用户表中检索用户信息并处理错误?
- python - 将numpy数组转换为numpy列python
- xamarin - 如何在 Xamarin 表单 ContentPage IconImageSource 中显示图像
- python - Python - 将同一标题下的每个列表数据的新行写入csv
- html - 为什么 CSS 不会更改 HTML 部分元素?
- objective-c - 来自 NSMenuItem (Button) 的 NSPopover 不接受鼠标事件
- javascript - jsx内部的异步函数调用