javascript - 尝试修改功能性 'pick' 函数,以便它返回对修改后的对象的选择,以将 redux 不可变映射状态传递给 props

标签 javascript functional-programming redux immutability currying

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

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

Redux 然后会将状态传递给 returns 函数。

我想做的是首先修改状态,因为我的状态是一个不可变的映射,所以我需要将 pick 我的状态转换为 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)

关于javascript - 尝试修改功能性 'pick' 函数,以便它返回对修改后的对象的选择,以将 redux 不可变映射状态传递给 props,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638168/

相关文章:

javascript - Php 将十进制字符串转换为十进制,但保留尾随零

javascript - 如何使用 Node.js 正确提供私有(private)静态文件?

javascript - 如何使用变量在 javascript 中呈现 unicode?

javascript - egghead.io 在 Redux 视频中使用哪个文本编辑器

javascript - 如何在 react-router Route 中从 onChange 调用 dispatch?

php - Android Web 应用程序 - 带有本地数据库的 php

functional-programming - 如何在Erlang中的列表中搜索项目?

functional-programming - 证明 LISP 没有功能

haskell - 使用列表推导式求幂

reactjs - 在 .NET Core 2.0 reactredux 模板项目中使用 react redux 和 typescript 将组件与 OwnProps 连接