🐞 fix(ID1000604): 购物页面

新增其他页面跳转回购物页面后自动刷新
This commit is contained in:
xuan 2022-10-17 11:58:54 +08:00
parent 86cf09ec1c
commit bf0fb9b434

View File

@ -1,21 +1,20 @@
import Search from '@/components/search' import Search from '@/components/search'
import { View } from '@tarojs/components' import { View } from '@tarojs/components'
import Taro, { useDidShow } from '@tarojs/taro' import Taro, { useDidHide, useDidShow, useRouter } from '@tarojs/taro'
import React, { FC, memo, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' import React, { FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
import styles from './index.module.scss' import styles from './index.module.scss'
import classnames from 'classnames' import classnames from 'classnames'
import IconText from '@/components/iconText' import IconText from '@/components/iconText'
import InfiniteScroll from '@/components/infiniteScroll' import InfiniteScroll from '@/components/infiniteScroll'
import ItemList from './components/shoppingCartItem/index' import ItemList from './components/shoppingCartItem/index'
import BottomBtns from '@/components/BottomBtns'
import { formatPriceDiv } from '@/common/format' import { formatPriceDiv } from '@/common/format'
import BottomSettleBar from './components/bottomSettleBar' import BottomSettleBar from './components/bottomSettleBar'
import BottomEditBar from './components/bottomEditBar' import BottomEditBar from './components/bottomEditBar'
import { ShoppingCartDeleteApi, ShoppingCartListApi } from '@/api/index' import { ShoppingCartDeleteApi, ShoppingCartListApi } from '@/api/index'
import { dataLoadingStatus, debounce } from '@/common/util' import { dataLoadingStatus, debounce, getFilterData } from '@/common/util'
import { ShoppingCart, TriggerCheckboxOptions } from './components/shoppingCart/index' import { ShoppingCart } from './components/shoppingCart/index'
import { GoodsMeta, Goods, useShoppingCart, useShoppingContext } from './context' import { Goods, useShoppingContext } from './context'
import { alert, goLink } from '@/common/common' import { alert, goLink, isEmptyObject } from '@/common/common'
export const Shopping: FC = memo(() => { export const Shopping: FC = memo(() => {
// 计算总的预估金额 // 计算总的预估金额
@ -48,6 +47,9 @@ export const Shopping: FC = memo(() => {
interface InternalContainer {} interface InternalContainer {}
const ShoppingCartContainer: FC<InternalContainer> = () => { const ShoppingCartContainer: FC<InternalContainer> = () => {
let isFirst = useRef(true)
const { isManageStatus, setManageStatus, selectedAmount, currentCheckedPurchaserId, currentCheckedSaleMode, colorStore, setColorStore } = useShoppingContext() const { isManageStatus, setManageStatus, selectedAmount, currentCheckedPurchaserId, currentCheckedSaleMode, colorStore, setColorStore } = useShoppingContext()
// 管理 // 管理
@ -55,16 +57,30 @@ const ShoppingCartContainer: FC<InternalContainer> = () => {
setManageStatus(!isManageStatus) setManageStatus(!isManageStatus)
} }
const [listHeight, setListHeight] = useState('auto') const listHeightRef = useRef('auto')
const { fetchData, state } = ShoppingCartListApi() const { fetchData, state } = ShoppingCartListApi()
const [searchOptions, setSearchOptions] = useState({ const [searchOptions, setSearchOptions] = useState({
short_name_or_phone: '', short_name_or_phone: '',
}) })
useDidShow(()=>{
console.log('onShow');
if (!isFirst.current){
fetchData(searchOptions)
}
})
useDidHide(() => {
console.log('onHide');
})
console.log('rerender');
useEffect(() => { useEffect(() => {
fetchData(searchOptions) console.log('useEffect fetchData')
if (!isEmptyObject(getFilterData(searchOptions))){
fetchData(searchOptions)
}
}, [searchOptions]) }, [searchOptions])
// 输入了搜索关键字 // 输入了搜索关键字
@ -82,7 +98,9 @@ const ShoppingCartContainer: FC<InternalContainer> = () => {
// useLayoutEffect 执行在DOM更新之后浏览器绘制之前 如果放在 useEffect 里面会产生多一次不必要的回流和重绘,可能会引起视图闪现 // useLayoutEffect 执行在DOM更新之后浏览器绘制之前 如果放在 useEffect 里面会产生多一次不必要的回流和重绘,可能会引起视图闪现
useLayoutEffect(() => { useLayoutEffect(() => {
;(async () => { ;(async () => {
console.log('useLayoutEffect')
await fetchData() await fetchData()
isFirst.current = false
let query = Taro.createSelectorQuery() let query = Taro.createSelectorQuery()
console.log('query', query) console.log('query', query)
query.select('#shoppingContainer').boundingClientRect() query.select('#shoppingContainer').boundingClientRect()
@ -94,7 +112,7 @@ const ShoppingCartContainer: FC<InternalContainer> = () => {
const topBarHeight = res[1].height const topBarHeight = res[1].height
const bottomBarHeight = res[2].height const bottomBarHeight = res[2].height
const listHeight = containerHeight - topBarHeight - bottomBarHeight const listHeight = containerHeight - topBarHeight - bottomBarHeight
setListHeight(listHeight + 'px') listHeightRef.current = listHeight + 'px'
}) })
})() })()
}, []) }, [])
@ -191,12 +209,8 @@ const ShoppingCartContainer: FC<InternalContainer> = () => {
</Search> </Search>
</View> </View>
<View className={classnames('flex-item', 'flex-col', styles['shopping--context'])}> <View className={classnames('flex-item', 'flex-col', styles['shopping--context'])}>
<View className={classnames(styles.shopping__list__container, 'flex-item')} style={{ height: listHeight }}> <View className={classnames(styles.shopping__list__container, 'flex-item')} style={{ height: listHeightRef.current }}>
<InfiniteScroll <InfiniteScroll statusMore={statusMore} refresherEnabled={true} selfOnRefresherRefresh={handleRefresh} refresherTriggered={refreshStatus}>
statusMore={statusMore}
refresherEnabled={true}
selfOnRefresherRefresh={handleRefresh}
refresherTriggered={refreshStatus}>
{!!shoppingCartData?.list?.length && {!!shoppingCartData?.list?.length &&
shoppingCartData?.list?.map((item, index) => { shoppingCartData?.list?.map((item, index) => {
return <ItemList itemData={item} key={index}></ItemList> return <ItemList itemData={item} key={index}></ItemList>