Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将自定义钩子注入evolve函数的优雅方式_Javascript_Reactjs_Functional Programming_React Hooks_Ramda.js - Fatal编程技术网

Javascript 将自定义钩子注入evolve函数的优雅方式

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.进化

我和我的团队每天都会将FP和react钩子模式紧密地结合在一起,尽管有时我们很难用纯函数来管理钩子。最近,我们遇到了很多情况,钩子“回调”必须位于
组合
或另一个转换器中的某个位置-在这种情况下,它是
演化
函数,例如:

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))