Javascript 试图修改函数';选择';函数,以便它返回对修改对象的拾取,以便将redux不可变映射状态返回给props

Javascript 试图修改函数';选择';函数,以便它返回对修改对象的拾取,以便将redux不可变映射状态返回给props,javascript,functional-programming,redux,immutability,currying,Javascript,Functional Programming,Redux,Immutability,Currying,我正在尝试清理我的mapStateToProps,使用ramda,我可以使用r.pick通过传入我想要的属性来返回一个curried函数,如下所示: const mapStateToProps = R.pick(['board', 'nextToken']) 然后Redux将状态传递给returns函数 我想做的是首先修改状态,因为我的状态是一个不可变的映射,所以我需要通过pick my state cast as plan js 我可以用以下方法做到这一点,但我相信,从功能上来说,有一种更干

我正在尝试清理我的mapStateToProps,使用ramda,我可以使用r.pick通过传入我想要的属性来返回一个curried函数,如下所示:

const mapStateToProps = R.pick(['board', 'nextToken'])
然后Redux将状态传递给returns函数

我想做的是首先修改状态,因为我的状态是一个不可变的映射,所以我需要通过pick my state cast as plan js

我可以用以下方法做到这一点,但我相信,从功能上来说,有一种更干净的方法可以做到这一点。这是任何人都能看到的简单的东西吗

import {Map} from 'immutable'
import R from 'ramda'

const immutable_state = Map({
    name: 'alice',
    age: 30
})

const pick_from_immutable = (attrs, obj) =>
    // accepts a list of attrs
    // returns a function that accepts an immutable and returns its attrs defined by attrs, also be nice to just return the value if called with an immutable 2nd arg
    obj ?
        R.pick(attrs, obj.toJS()) :
        (imm) => R.pick(attrs, imm.toJS())

const pick_age_from_immutable = pick_from_immutable(['age'])

console.log(pick_age_from_immutable(immutable_state)) // -> { age: 30 }

const mapStateToProps = pick_age_from_immutable

我更喜欢使用Immutablejs函数来处理这类事情。它可以很好地处理嵌套项。但我可以看到一个用例,如果我在多个组件中选择年龄(或某些属性),那么我可能会为它创建一个实用函数

例如:

var a = Map({
    b: Map({
        c: 10
    })
})

// Get value of c in nested a object. Set not found value to null.
var valueOfC = a.getIn(['b', 'c'], null)

我更喜欢使用Immutablejs函数来处理这类事情。它可以很好地处理嵌套项。但我可以看到一个用例,如果我在多个组件中选择年龄(或某些属性),那么我可能会为它创建一个实用函数

例如:

var a = Map({
    b: Map({
        c: 10
    })
})

// Get value of c in nested a object. Set not found value to null.
var valueOfC = a.getIn(['b', 'c'], null)