Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

mergeProps.js 1.3 KiB

vor 3 Jahren
1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import verifyPlainObject from '../utils/verifyPlainObject'
  2. export function defaultMergeProps(stateProps, dispatchProps, ownProps) {
  3. return { ...ownProps, ...stateProps, ...dispatchProps }
  4. }
  5. export function wrapMergePropsFunc(mergeProps) {
  6. return function initMergePropsProxy(
  7. dispatch,
  8. { displayName, pure, areMergedPropsEqual }
  9. ) {
  10. let hasRunOnce = false
  11. let mergedProps
  12. return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
  13. const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps)
  14. if (hasRunOnce) {
  15. if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps))
  16. mergedProps = nextMergedProps
  17. } else {
  18. hasRunOnce = true
  19. mergedProps = nextMergedProps
  20. if (process.env.NODE_ENV !== 'production')
  21. verifyPlainObject(mergedProps, displayName, 'mergeProps')
  22. }
  23. return mergedProps
  24. }
  25. }
  26. }
  27. export function whenMergePropsIsFunction(mergeProps) {
  28. return typeof mergeProps === 'function'
  29. ? wrapMergePropsFunc(mergeProps)
  30. : undefined
  31. }
  32. export function whenMergePropsIsOmitted(mergeProps) {
  33. return !mergeProps ? () => defaultMergeProps : undefined
  34. }
  35. export default [whenMergePropsIsFunction, whenMergePropsIsOmitted]