如何用Ramda函数式组合将解析后的DOM对象转换为HTML字符串
实现DOM对象转HTML字符串的Ramda方案
你最初的pipe写法无法运行的核心原因是Ramda的pipe会将上一个函数的返回值作为下一个函数的入参:openTag返回的是<div>字符串,没有content属性,传入setContent自然拿不到预期结果。你的三个工具函数都需要依赖原始的element对象作为输入,不能用普通串行pipe直接传递返回值。
方案1:搭配R.juxt的pipe写法(最符合你预期的结构)
R.juxt可以接收一组函数,返回的新函数会将入参传给这组所有函数,将结果按顺序组合为数组,再拼接即可:
import * as R from 'ramda'; const element = { name: 'div', content: 'foo' }; const openTag = element => `<${element.name}>`; const closeTag = element => `</${element.name}>`; // 原setContent语义更偏向获取内容,建议调整命名为getContent const getContent = element => element.content; const renderElement = R.pipe( R.juxt([openTag, getContent, closeTag]), R.join('') ); console.log(renderElement(element)); // 输出:<div>foo</div>
方案2:用R.converge实现
R.converge接收一个合并函数和一组分支函数,所有分支函数都会接收原始入参执行,结果传入合并函数处理:
const renderElement = R.converge( (openStr, content, closeStr) => `${openStr}${content}${closeStr}`, [openTag, getContent, closeTag] ); console.log(renderElement(element)); // 输出:<div>foo</div>
内容的提问来源于stack exchange,提问作者remtsoy
相关产品推荐
相关产品推荐

