【问题标题】:Recompose - mapProps and withProps not updating propRecompose - mapProps 和 withProps 不更新道具
【发布时间】:2018-02-05 02:59:49
【问题描述】:

我有一个容器,我想管理名册排序顺序、方向和性别过滤器。我在下面的当前withProps 代码中尝试了withPropsmapProps,名册在withProps 内正确更新,但它不会覆盖摔跤手组件中的现有名册

import { compose, withState, withProps, withHandlers } from "recompose"
import { connect } from "react-redux"
import sortBy from "lodash/sortBy"


// container
export default compose(
  withState("male", "toggleGender", true),
  withState("sortByName", "toggleSortByName", true),
  withState("order", "toggleOrder", true),
  withHandlers({
    toggleGender: ({ toggleGender, male, }) => () => toggleGender(!male),
    toggleSortByName: ({ toggleSortByName, sortByName, }) => () =>
      toggleSortByName(!sortByName),
    toggleOrder: ({ toggleOrder, order, }) => () => toggleOrder(!order),
  }),
  connect(state => ({
    roster: state.roster,
  })),
  withProps(props => {
    const { roster, toggleOrder, male, sortByName, } = props

    let newRoster = Object.assign([], roster)

    newRoster = newRoster.filter(wrestler => wrestler.male === male)

    if (toggleOrder) {
      newRoster = newRoster.reverse()
    }

    newRoster = sortBy(newRoster, sortByName ? "name" : "points")

    return {
      roster: newRoster,
      ...props,
    }
  })
)(Wrestlers)

【问题讨论】:

    标签: javascript reactjs recompose


    【解决方案1】:

    那太傻了,我需要更改返回的顺序,我还修复了其他一些未成年人

    import { compose, withState, withProps, withHandlers } from "recompose"
    import { connect } from "react-redux"
    import sortBy from "lodash/sortBy"
    
    import Wrestlers from "./wrestlers"
    
    export default compose(
      withState("male", "toggleGender", true),
      withState("sortByName", "toggleSortByName", true),
      withState("order", "toggleOrder", true),
      withHandlers({
        toggleGender: ({ toggleGender, male, }) => () => toggleGender(!male),
        toggleSortByName: ({ toggleSortByName, sortByName, }) => () =>
          toggleSortByName(!sortByName),
        toggleOrder: ({ toggleOrder, order, }) => () => toggleOrder(!order),
      }),
      connect(state => ({
        roster: state.roster,
      })),
      withProps(props => {
        const { roster, order, male, sortByName, } = props
    
        let newRoster = Object.assign([], roster)
    
        newRoster = newRoster.filter(wrestler => wrestler.male === male)
    
        newRoster = sortBy(newRoster, sortByName ? "name" : "points")
    
        if (order) {
          newRoster = newRoster.reverse()
        }
    
        return {
          ...props,
          roster: newRoster,
        }
      })
    )(Wrestlers)
    

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 2017-08-09
      • 2019-03-05
      • 1970-01-01
      • 2017-07-24
      • 2019-08-03
      • 2018-12-16
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多