Redux是一阶FRP,就像Elm一样。

但是,似乎高阶FRP并没有真正与react一起使用。

为什么一阶FRP对React没用,而高阶没那么有用呢?

也许React不需要更高阶的主义?因此,作为回报,可以保留时间流逝的调试器吗?

换一种说法:

React是一种具有状态并返回视图的函数。

FRP是声明和执行状态机的一种方式。

这些是正交的关注点,为什么不将它们组合起来呢?

编辑:

如果我比较这个https://github.com/ochrons/diode/tree/master/examples/todomvc/src/main/scala/example

与此https://github.com/lihaoyi/workbench-example-app/blob/todomvc/src/main/scala/example/ScalaJSExample.scala

然后看来,使用scala.rx的同一应用程序的代码行数是Diode的一半(使用Redux,如单向数据流库)。

编辑2:

我的猜测-为什么不会发生-是大多数高阶frp人士(他们希望在Web开发中使用高阶FRP)使用reflex-frp,而他们使用reflex-dom而不是react。可能反射性使反应变得不必要。

最佳答案

编辑:我认为,React和高阶FRP概念特别面临的一大挑战是,在React组件内部处理状态会使用户接触到不是HO FRP所关注的语言概念,我认为这是还有更广泛的ES6 JS问题。我不是这个主题的专家,但是我在FRP之旅中分享了自己的想法和经验。

React的许多组件功能和组成都依赖于JS class语法。对我来说,这是一个挑战,因为您要混淆术语和概念。对于许多前端开发人员(包括我自己)来说,React是他们首次接触FRP范例。当您一直使用classesconstructors来查看OOP继承术语时,很难理解功能组合的重要性。我认为这可以解释为什么我们在React库中看到了这种爆炸式增长,而没有看到太多的底层范式-因为存在各种对比术语。与FRP Read this tidy little post相反,它更多地涉及组件和以DOM为中心的视图。

React隐藏了很多基本概念,对于许多使用FRP范式的程序员来说,他们不喜欢这种感觉有多神奇,这意味着新来的人很容易只使用class接口来制作其组件和组件。没有接触到很多潜在的FRP范例。

我认为,在处理状态时,React本质上应该是只读的。这样处理后,React和Redux成为正交。 Redux更偏向于FRP概念,实际上,当以这种方式使用Redux时,它将变得更具声明性。

const mapStateToProps = (state, ownProps) => {
  return {
    id: ownProps.id,
    someData: state.projects.someData,
  }
}

const mapDispatchToProps = (dispatch) => {
  return {
    onSubmitForm(data) { //our callback
      dispatch( //redux dispatch function
        someAction(data) //our Redux Action Creator
      )
    }
  }
}

export default connect(mapStateToProps,mapDispatchToProps)(PresentationComponent)


在我们的演示文稿部分

const PresentationComponent = ({onSubmitForm, id}) => {
    return <form id="someForm" onSubmit={(e) => {
        e.preventDefault()
        onSubmitForm(getFormData(id))
    }}>
}


通过使用Redux的HO函数connect()mapStateToProps()mapDispatchToProps(),它可以使用仅将状态和方法作为参数的纯功能组件。这些方法本质上可以返回任何东西。当然,这传达了更纯净的高级/一阶和FRP概念。

尽管我相信我们会在应用程序和库开发中看到越来越多的FRP,但继续前进,但我认为,不要将婴儿扔掉洗澡水也很重要。

在丹·阿布拉莫夫(Dan Abramov)务实的post about Redux中,他提醒我们,我们不必总是只坚持一种工具并挂在一个范式上,这并不是说我是反OOP的,而是在生产中定期使用工厂和面向对象的概念,我只是觉得使用OOP中的术语会有些混乱,然后开始谈论FRP。

东西看

如评论中所述,cycle.js绝对值得一看。这是React的声明式和可重用的组件结构与RxJS中的数据流和可观察对象之类的概念的好处之间的良好平衡。

那是我的两分钱,我想听听是否还有其他输入?

关于reactjs - 使用React的高阶FRP-为什么不发生?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39665845/

10-15 22:04