码迷,mamicode.com
首页 > 其他好文 > 详细

[Ramda] Change Object Properties with Ramda Lenses

时间:2017-03-01 22:54:04      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:sam   basic   keep   mmu   work   ensp   name   use   nbsp   

In this lesson we‘ll learn the basics of using lenses in Ramda and see how they enable you to focus changes on specific properties of an object while keeping your data immutable.

 

what ‘R.lens‘ do is able to get or set prop value but keep the object immutable.

Normally when you two ways to use lens:

1. set up lens: ‘lens‘ + ‘prop‘ + ‘assoc‘;

After set up you can either get value by using ‘R.view‘;

Or change a prop by using ‘R.set‘ or ‘R.over‘.

 

2.  Using ‘lens‘ + ‘prop‘ + ‘assoc‘ is a little bit work to do, there is short syntax to do the same thing: ‘R.lensProp‘.

const R = require(ramda);

const {view, lens, assoc, prop, set, over, lensProp, toUpper} = R;

const person = {
    firstName: Fred,
    lastName: Filntstore
};

/*
* What lens does is modify prop value for a given object
* and keep data immutable.
* */

const firstNameLens = lens(
    prop(firstName),
    assoc(firstName)
);
const viewFirstName = view(firstNameLens);
// const result = viewFirstName(person); // Fred

/** Using R.set **/
const setFirstName = set(firstNameLens);
const updateFirstName = setFirstName(Zhentian);
// const result = updateFirstName(person); // { firstName: ‘Zhentian‘, lastName: ‘Filntstore‘ }

/** Using R.over instead of set **/
const result = over(firstNameLens, toUpper, person);

/** lensProp instead of prop + assoc **/
const lastNameLens = lensProp(lastName);
const result2 = over(lastNameLens, toUpper, person); // { firstName: ‘Fred‘, lastName: ‘FILNTSTORE‘ }
console.log(result);
console.log(result2);

 

[Ramda] Change Object Properties with Ramda Lenses

标签:sam   basic   keep   mmu   work   ensp   name   use   nbsp   

原文地址:http://www.cnblogs.com/Answer1215/p/5947338.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!