1

我想清理我的mapStateToProps,使用ramda我只能使用r.pick返回一個咖喱功能通過傳遞我想要的attrs像這樣:試圖修改一個功能的「選擇」功能,使其返回一個修改後的對象的拾取器,以將redux不可變的映射狀態轉換爲道具

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 

回答

0

我更喜歡使用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)