首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有启用ES7属性初始化器的Curried函数

没有启用ES7属性初始化器的Curried函数
EN

Stack Overflow用户
提问于 2016-08-10 18:21:13
回答 2查看 140关注 0票数 0

我在所谓 咖喱格式中有以下箭头函数,取自这就是答案

代码语言:javascript
代码运行次数:0
运行
复制
const getIntervals = n=> availability=> {}

我需要在一个用ES6语法编写的React组件中使用它,该组件由于实施而无法处理ES7属性初始化器。

“通常”function中的类上下文中的函数具有以下简单的样式:

代码语言:javascript
代码运行次数:0
运行
复制
myFunction () {}

但是我会把getIntervals函数转换成这种样式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-10 18:30:06

只需将getIntervals定义为常规方法,但让它返回您的curried函数:

代码语言:javascript
代码运行次数:0
运行
复制
class Example extends Component {
   getIntervals(n) {
      return (availability) => {

      }
   }
   render() {...}
}
票数 3
EN

Stack Overflow用户

发布于 2016-08-10 21:14:55

在另一个问题中看到我的作品很酷。我很高兴这对你有帮助。

@RobM为你提供了一个很好的答案,但我会给你另一个选择。

首先,您没有必要将函数保持为咖喱格式。由于这是一个用户定义的过程,如果它更好地为您服务,让它采取一个元组,您可以这样做!转换它和…一样容易†

代码语言:javascript
代码运行次数:0
运行
复制
// curried form
const getIntervals = n=> availability=> { ... }

// uncurried form
const getIntervals = (n,availability)=> { ... }

然后当你叫它

代码语言:javascript
代码运行次数:0
运行
复制
// curried form
getIntervals (30) (availability)

// changes to
getIntervals(30, availability)

我通常用咖喱的形式定义函数,但这绝不是你必须遵循的要求。以未仓促的形式,您可以直接在您的React组件上定义它,如so…。

代码语言:javascript
代码运行次数:0
运行
复制
class Example extends Component
  getIntervals (n,availability) {
    // ...
  }
}

或者因为getIntervals是一个通用的纯函数,所以没有理由将它的所有代码嵌入到组件中。你也可以把它完全分开

代码语言:javascript
代码运行次数:0
运行
复制
// curried
const getIntervals = n=> availability=> { ... }

// or choose uncurried
const getIntervals = (n,availability)=> { ... }

// call it from withint the class
class Example extends Component
  getIntervals (availability) {
    return getIntervals (this.props.intervalLength, availability)
  }
}

或者,现在您可能会看到,有一个包装器函数是多么的无用。更有可能的是,返回值将以其他方式使用,例如在事件处理程序或状态突变的…中

代码语言:javascript
代码运行次数:0
运行
复制
const getIntervals = (n,availability) => { ... }

class Example extends Component {
  // constructor ...
  onclick (event) {
    let intervals = getIntervals(this.props.intervalLength, this.state.availability)
    // do something with intervals
    console.log(intervals)
  }
  render () {
    return <button onClick={e=> onclick(e)}>show intervals</button>
  }    
}

现在,如果您愿意的话,getIntervals可以完全保留这个文件。您可以将它放到utils.js中并导入它。

代码语言:javascript
代码运行次数:0
运行
复制
import {getIntervals} from './utils'

class Example extends Component {
  onclick (event) {
    let intervals = getIntervals(this.props.intervalLength, this.state.availability)
     // ...
  }
  // ...
}

我以this.props.intervalLengththis.state.availability为例。实际上,我不知道这两个值是如何与组件关联的。我把这个留给你,^_^

从咖喱过程到非咖喱过程的†转换通常很简单,但是在咖喱过程是递归过程的情况下,您必须小心--在这种情况下,您还必须更新递归调用,使其处于非仓促状态。

我将此作为脚注留作脚注,因为我编写了getIntervals,在这个特定的场景中转换很简单

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38880840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档