如何向react.js中的每个组件传递一个prop
How to pass a prop to every component in react.js?
我正在使用react.js建立一个网站。客户端通过ajax接收大量json,然后用于填充所有必要的字段、图形等。由于这个json将涵盖网站上包含的几乎所有信息,因此几乎每个组件都可以访问它。是否有一种干净的方式将它传递给每个最后的组件(有很多组件)?以常规方式传递给70个组件似乎既脏又低效。
正如React的文档所述,您可以通过集成全局事件系统来让组件通信,然后在componentDidMount()
中订阅来自所有组件的application-data
事件。
这样,每次您将从负责提取网站数据的代码中发出application-data
事件时,所有组件都将接收该数据。此时,您可以调用setState()
。
请小心,一旦组件在componentWillUnmount()
内"超出作用域",就取消绑定事件。
不这样做将导致内存泄漏,因为你将有事件处理程序悬空,它将被调用,每次你拉出网站数据,即使你的组件的实例已经从DOM中删除。
你也可以尝试让你的组件自己拉数据,因为发送一个巨大的JSON,并不是最好的解决方案。我的意思是,为了工作,每个组件应该使用它需要的数据,而不是整个网站的数据。我要改变这种情况的方法是解析JSON对象并将其存储在一个变量中以供参考,在所有组件都可以访问的范围内,并使用事件系统仅通知组件数据准备好了,每个组件将转到全局数据对象并获取它们的数据。
例子(伪代码):
XHR.getData
XHR.onReadyState => GlobalNameSpace.data = data
EventSystem.PUBLISH('application-data')
// component code
Component {
EventSystem.SUBSCRIBE('application-data') =>
dataNeededForInit = GlobalNameSpace.data.componentXData
}
参考:https://facebook.github.io/react/tips/communicate-between-components.html
上下文可能符合要求。这可能不是一个特别整洁的解决方案,但这可能是一个起点。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 在 React/Redux 应用程序中,我应该何时显式传递一个 prop,而不是使用 mapStateToProps 从
- 在 React 中指定一个 prop 作为特定的组件
- 如何向react.js中的每个组件传递一个prop
- 使用.prop()创建一个全选复选框,但不希望删除该复选框
- opt.prop不是一个函数