簡體   English   中英

重構 - mapProps和withProps不更新道具

[英]Recompose - mapProps and withProps not updating prop

我有一個容器,我想管理名冊排序順序,方向和性別過濾器。 我在下面的當前withProps代碼中嘗試了withPropsmapProps ,名單在withProps正確更新,但它沒有覆蓋Wrestlers組件中的現有名單

 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) 

嗯,這很愚蠢,我需要改變返回的順序,我還修復了其他一些未成年人

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM