Javascript 将自定义钩子注入evolve函数的优雅方式
我和我的团队每天都会将FP和react钩子模式紧密地结合在一起,尽管有时我们很难用纯函数来管理钩子。最近,我们遇到了很多情况,钩子“回调”必须位于Javascript 将自定义钩子注入evolve函数的优雅方式,javascript,reactjs,functional-programming,react-hooks,ramda.js,Javascript,Reactjs,Functional Programming,React Hooks,Ramda.js,我和我的团队每天都会将FP和react钩子模式紧密地结合在一起,尽管有时我们很难用纯函数来管理钩子。最近,我们遇到了很多情况,钩子“回调”必须位于组合或另一个转换器中的某个位置-在这种情况下,它是演化函数,例如: const getDefinedActions=R.filter( R.两者(isActionDefined,R.ifElse(hasAfterConfirm,isAfterConfirmDefined,R.T)) ) const translatetiles=R.map( R.进化
组合
或另一个转换器中的某个位置-在这种情况下,它是演化
函数,例如:
const getDefinedActions=R.filter(
R.两者(isActionDefined,R.ifElse(hasAfterConfirm,isAfterConfirmDefined,R.T))
)
const translatetiles=R.map(
R.进化({
title:title=>useTranslate()(title)
})
)
export const useActions=R.compose(
翻译体,
获取定义动作
)
我不确定我是否完全理解你的问题。您只是在寻找一种只初始化一次useTranslate
的方法吗?如果是这样的话,那么我认为拉姆达没有内置任何东西,但是写这样的东西是很容易的
const dethunk=(fn)=>{
设initialized=null;
return(…args)=>(初始化的| |(初始化的=fn())(…args)
}
然后写一些类似的东西
const translateTitles = map (evolve ({title: dethunk(useTranslate) }))
如果要将参数传递给初始化,可以将其更改为
const dethunk=(fn,…initialArgs)=>{
设initialized=null;
return(…args)=>(初始化的| |(初始化的=fn(…初始化的args)))(…args)
}
常量foo=(a,b)=>{
log(`initialization with'${a}'和'${b}`)
return(c)=>`foo('${a}','${b}',${c})`
}
常数条=dethunk(foo,'x,'y')
log('尚未初始化');
控制台日志(条(1))
控制台日志(条(2))
console.log(条形图(3))