我正在开始一个新的React应用程序,看到生态系统中的所有新闻,我想慢下来,实际上考虑我的选择,从React / Webpack / Babel开始,并引入更多。
这些选择中的第一个是否使用Flux(更准确地说,Redux,它看起来很棒并且似乎赢得了助威战争)。我就是这样的地方:
为了解决这个问题而不引入新的依赖关系,我发现有两篇文章(1: Andrew Farmer,2: Hao Chuan)鼓励使用最近推出的context feature of React。
→使用context
可以让我将模型变异回调暴露给我的子组件。对我而言,这听起来并不是一个可怕的误用:我不会传递模型数据,只是引用用于绑定事件处理程序的函数。
感谢。
答案 0 :(得分:2)
在观看Dan Abramov的Getting Started with Redux系列节目之后回答我自己的问题,我热烈推荐。
是的,看起来很明智:Redux遇到了同样的问题并用Context
解决了这个问题(至少在最初阶段,实施可能已经改变)。它在react-redux
组件和<Provider>
函数下的connect()
绑定中实现和打包(以及其他内容)。
最初,在步骤24 - Passing the Store Down Explicitly via Props 开始时,我们有一个Todo应用程序,其中Redux商店可用作顶级变量。这很糟糕(1.可测试性/可模拟性,2。服务器渲染需要&#34;每个请求都有不同的商店实例,因为不同的请求有不同的数据&#34; ),所以商店从降级顶级变量到根组件prop。
在我的情况下,必须将商店作为prop传递给每个组件是令人讨厌的,因此在25 - Passing the Store Down Implicitly via Context中,Dan演示使用Context
将Redux存储传递给任意嵌套的组件。
接下来是26 - Passing the Store Down with <Provider>
from react-redux,解释了如何将其封装在react-redux
绑定中。
27 - Generating Containers with connect()
from React Redux进一步封装了表示组件中容器组件的生成。
答案 1 :(得分:0)
就个人而言,如果你想一想Angular中依赖注入的方式,我觉得这个问题很容易回答。在Angular中你有你的DOM,然后你拥有所有那些独立于DOM结构的服务,提供者,工厂,常量和诸如此类的东西,只需在创建模块或控制器时提及他们的名字就可以导入。
我将this.context
的使用比作DI。 w.r.t与Angular的不同之处在于,不是使用函数参数名称声明依赖关系,而是使用childContextTypes
而不是将依赖关系作为函数参数,而是通过this.context
获取它们。
从这个意义上讲,询问是否通过this.context
传递模型mutators的问题是明智的,归结为在Angular中注册依赖注入模型是否有意义。我从来没有见过后者的问题,因此我推断前者也很好。