我正在尝试使用 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/