我正在开发使用Meteor和React作为视图引擎的应用程序
考虑下图:
从另一个示例反应隐藏组件
当触发C4按钮单击事件时,我需要更改C2组件状态。由于他们没有直接关系,因此我无法直接从C4进入C2状态。
另一个示例是从Component提交html" target="_blank">表单并获取在另一个Component中声明的数据(输入字段的值)。
我知道可以通过一些技巧来解决此问题(例如,流星会话,通过每个组件传递数据,基于通量的Action / Dispatcher)。
Reactdocs建议使用事件/订阅系统(通量是一种可能的解决方案,但通量不止此…)在组件之间进行通信
Redux是另一种可能性(我担心这样一个事实,对于大型应用程序,如果我有很多动作,则组合归约器功能将爆炸,并且还担心缺少特定于动作的订阅系统-
到目前为止我知道在调度操作时将执行所有侦听器-Redux中的新用户也许我错了)
Flux或Redux是有效的模式,可以满足比我更大的需求,我已经进行过Meteor这类工作。我唯一需要的是访问另一个内部的组件状态。
我需要具有大量组件视图的中型/大型应用程序的可伸缩解决方案
解决该问题的“正确”方法是什么?
更新:
最近我给了redux一个机会,它似乎可以完成工作(它确实很棒并且得到了很好的支持),因此,如果您在相同的情况下,请检查React +Redux:提交多组件表单
您可以使用任何发布/订阅事件库,然后使您的组件侦听所需的任何事件。
例如:
import React from 'react'
import 'events' from 'eventPublishSubscribeLibrary'
class Component2 extends React.Component {
constructor (props) {
super(props)
this.toggleVisibility = this.toogleVisibility.bind(this)
this.state = {
visible = true
}
}
componentDidMount () {
events.subscribe('clicked-button', this.toogleVisibility)
}
toogleVisibility () {
this.setState({
visible: !this.state.visible
})
}
render () {
return visible && (
<div>content</div>
)
}
}
const Component4 = () => (
<button onClick={events.publish('clicked-button')}>Toggle Visibility</button>
)
您可以在davidwalsh的这篇文章中找到Pub / Sub JavaScript
Object
的简单实现。或者,您可以在npm中搜索其他库。
这是我能想到的最简单的实现,对于小型项目而言,这是一个应该可行的快速简便的解决方案。
无论如何,就项目的增长而言,您将在组件之间开始有很多 动作/反应 。随着每个新组件的添加,跟踪所有组件之间的所有这些 关系
将变得更加复杂。在这里将应用程序的 全局
状态存储在一个地方很方便,这是redux基于的三项原则之一:
单一事实真相 。
我有一组组件呈现同一页面的不同部分。只要在其中一个内部提交操作,就应该锁定其他的操作(应该通过它们传播一个volatile标志,并触发一个禁用所有元素的javascript函数) 页面组件: 有什么想法吗?我是新手,任何提示都会有帮助。
问题内容: 我有多个组件都需要做同一件事。(一个简单的函数可以映射其子组件,并对每个子组件执行某些操作)。目前,我正在每个组件中定义此方法。但是我只想定义一次。 我可以在顶层组件中定义它,然后将其作为道具传递。但这并不完全正确。它更多的是库功能而不是道具。(在我看来)。 正确的做法是什么? 问题答案: 如果您使用诸如browserify之类的东西,那么您可以拥有一个外部文件,即util.js,该文
在Angular 1.x.x中,您只需请求相同的服务,并以相同的实例结束,这使得在服务中共享数据成为可能。 现在在Angular 2中,我有了一个引用我的服务的组件。我可以读取和修改服务中的数据,这很好。当我试图在另一个组件中注入相同的服务时,似乎得到了一个新的实例。 我做错了什么?是模式本身有问题(使用服务共享数据)还是我需要将服务标记为单例(在应用程序的一个实例中)或其他? 我在 btw上 我
寻找一种方法,使服务在必要时将最新数据提供给订阅的组件。例如:组件 3 将更改写入 API 以下是一些片段和一些描述,说明到目前为止我所做的工作: 该服务通过HTTP从API获取数据。组件1和组件2订阅了服务返回的observable:
我正在使用angular2开发一个应用程序。我有一个场景,需要在路由时(使用router.navigate())将复杂的数据(对象数组)从一个组件传递到另一个组件(它们不是父子关系,而是两个独立的组件)。我在谷歌上搜索过,大多数结果描述了父子组件的场景。我浏览了结果,找到了这些传递数据的方法。 1)创建共享服务2)通过路由参数 第二种方法适合我(尽管我不喜欢上面解释的复杂数据)。我无法使用共享服务
问题内容: 我有2个需要共享状态的React组件,react- router显示了组件A,该组件接受一些输入并将其添加到其状态,在状态成功更新后,我想重定向到组件B,用户在其中添加在我向我的api提交发布请求以保存来自组件A和B的数据之前,使用一些更多的输入并更新与组件A相同的状态以使用来自A和B的输入来构建对象。如何做到这一点,使用react- router的方式,还是我必须在组件之间设置父/子