繁体   English   中英

试图修改一个功能'pick'函数,以便它返回一个修改对象的选择,以便将redux不可变映射状态转换为props

[英]Trying to modify a functional 'pick' function so that it returns a pick on a modified object for redux immutable map state to props

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

const mapStateToProps = R.pick(['board', 'nextToken'])

然后Redux将状态传递给返回函数。

我想要做的是首先修改状态,因为我的状态是一个不可变的映射,所以我需要通过选择我的状态强制转换为计划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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM