javascript - 使用带有参数的重新选择选择器

标签 javascript reactjs ecmascript-6 redux reselect

如何将附加参数传递给组合选择器?我正在努力

• 获取数据

• 过滤数据

• 将自定义值添加到我的数据集/按 myValue 分组数据

export const allData = state => state.dataTable
export const filterText = state => state.filter.get('text')

export const selectAllData = createSelector(
  allData,
  (data) => data
)

export const selectAllDataFiltered = createSelector(
  [ selectAllData, filterText ],
  (data, text) => {
    return data.filter(item => {
      return item.name === text
    })
  }
)

export const selectWithValue = createSelector(
  [ selectAllDataFiltered ],
  (data, myValue) => {
    console.log(myValue)
    return data
  }
)

let data = selectWithValue(state, 'myValue')

console.log(myValue) 返回 undefined

最佳答案

更新时间:2022 年 2 月 16 日

Reselect 4.1 的新解决方案: See detail

// selector.js
const selectItemsByCategory = createSelector(
  [
    // Usual first input - extract value from `state`
    state => state.items,
    // Take the second arg, `category`, and forward to the output selector
    (state, category) => category
  ],
  // Output selector gets (`items, category)` as args
  (items, category) => items.filter(item => item.category === category)
);

// App.js
const items = selectItemsByCategory(state, 'javascript');
// Another way if you're using redux hook:
const items = useSelector(state => selectItemsByCategory(state, 'javascript'));

更新时间:2021 年 3 月 6 日

Reselect 的解决方案: See detail

// selector.js
import { createSelector } from 'reselect'
import memoize from 'lodash.memoize'

const expensiveSelector = createSelector(
  state => state.items,
  items => memoize(
    minValue => items.filter(item => item.value > minValue)
  )
)

// App.js
const expensiveFilter = expensiveSelector(state)
// Another way if you're using redux:
// const expensiveFilter = useSelector(expensiveSelector)

const slightlyExpensive = expensiveFilter(100)
const veryExpensive = expensiveFilter(1000000)

旧:

这是我的方法。创建一个带参数的函数,返回函数为reselect

export const selectWithValue = (CUSTOM_PARAMETER) => createSelector(
  selectAllDataFiltered,
  (data) => {
    console.log(CUSTOM_PARAMETER)
    return data[CUSTOM_PARAMETER]
  }
)

const data = selectWithValue('myValue')(myState);

关于javascript - 使用带有参数的重新选择选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40291084/

相关文章:

javascript - AJAX (XMLHttpRequest) 进度监控不适用于 Service Workers

javascript - 在 Javascript 中重置 FileReader 内容

javascript - 如何从 Nested Json array angular 2 打印和分离键和值并将其添加到选择框中

javascript - 使用 React.js 显示列表

javascript - ES6 - 如何修改其他模块中的变量

javascript - jQuery 周期 2 : pause slideshow on click

css - 具有奇怪边缘的 SVG 图标渲染

javascript - this.props.filterUser 不是一个函数

javascript - 代理递归函数

node.js - 使用 KoaJS 在 ES2015 中的类中使用带有 Yield 的生成器函数