发布于 2016-08-10 10:30:06
只需将getIntervals
定义为常规方法,但让它返回您的curried函数:
class Example extends Component {
getIntervals(n) {
return (availability) => {
}
}
render() {...}
}
发布于 2016-08-10 13:14:55
在另一个问题中看到我的作品很酷。我很高兴这对你有帮助。
@RobM为你提供了一个很好的答案,但我会给你另一个选择。
首先,您没有必要将函数保持为咖喱格式。由于这是一个用户定义的过程,如果它更好地为您服务,让它采取一个元组,您可以这样做!转换它和…一样容易†
// curried form
const getIntervals = n=> availability=> { ... }
// uncurried form
const getIntervals = (n,availability)=> { ... }
然后当你叫它
// curried form
getIntervals (30) (availability)
// changes to
getIntervals(30, availability)
我通常用咖喱的形式定义函数,但这绝不是你必须遵循的要求。以未仓促的形式,您可以直接在您的React组件上定义它,如so…。
class Example extends Component
getIntervals (n,availability) {
// ...
}
}
或者因为getIntervals
是一个通用的纯函数,所以没有理由将它的所有代码嵌入到组件中。你也可以把它完全分开
// 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)
}
}
或者,现在您可能会看到,有一个包装器函数是多么的无用。更有可能的是,返回值将以其他方式使用,例如在事件处理程序或状态突变的…中
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中并导入它。
import {getIntervals} from './utils'
class Example extends Component {
onclick (event) {
let intervals = getIntervals(this.props.intervalLength, this.state.availability)
// ...
}
// ...
}
我以this.props.intervalLength
和this.state.availability
为例。实际上,我不知道这两个值是如何与组件关联的。我把这个留给你,^_^
从咖喱过程到非咖喱过程的†转换通常很简单,但是在咖喱过程是递归过程的情况下,您必须小心--在这种情况下,您还必须更新递归调用,使其处于非仓促状态。
我将此作为脚注留作脚注,因为我编写了getIntervals
,在这个特定的场景中转换很简单
https://stackoverflow.com/questions/38880840
复制